最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀opencv->tensorrt的數(shù)據(jù)排列方式

 更新時間:2023年02月02日 10:21:26   作者:永力  
這篇文章主要介紹了解讀opencv->tensorrt的數(shù)據(jù)排列方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

opencv->tensorrt的數(shù)據(jù)排列

在使用tensorrt的時候,將opencv的Mat格式處理成tensorrt輸入方式。

中間還有圖像預處理,包括通道的變換、圖像尺寸變形,最重要的是如何將Mat格式處理成tensorrt 可接受的輸入形式。

opencv的Mat中BGR形式的數(shù)據(jù)排列是這樣的:

b(0,0), g(0,0), r(0,0), b(0,1), g(0,1), r(0,1),......, b(h-1,w-1), g(h-1,w-1), r(h-1,w-1)

tensorrt所需要的數(shù)據(jù)排列是這樣的:

b(0,0), b(0,1),..., b(h-1,w-1), g(0,0), g(0,1)..., g(h-1,w-1), r(0,0),r(0,1), ..., r(h-1,w-1)

可見,需要將Mat的數(shù)據(jù)通道分離,重新排列,才能為tensorrt所用。

下面摘錄兩種常見的處理方法。

1.使用split函數(shù)分離通道

std::vector<float> prepareImage(std::vector<cv::Mat> &vec_img) {
    std::vector<float> result(BATCH_SIZE * IMAGE_WIDTH * IMAGE_HEIGHT * INPUT_CHANNEL);
    float *data = result.data();
    int index = 0;
    for (const cv::Mat &src_img : vec_img)
    {
        if (!src_img.data)
            continue;
        float ratio = float(IMAGE_WIDTH) / float(src_img.cols) < float(IMAGE_HEIGHT) / float(src_img.rows) ? float(IMAGE_WIDTH) / float(src_img.cols) : float(IMAGE_HEIGHT) / float(src_img.rows);
        cv::Mat flt_img = cv::Mat::zeros(cv::Size(IMAGE_WIDTH, IMAGE_HEIGHT), CV_8UC3);
        cv::Mat rsz_img;
        cv::resize(src_img, rsz_img, cv::Size(), ratio, ratio);
        rsz_img.copyTo(flt_img(cv::Rect(0, 0, rsz_img.cols, rsz_img.rows)));
        flt_img.convertTo(flt_img, CV_32FC3, 1.0 / 255);

        //HWC TO CHW
        int channelLength = IMAGE_WIDTH * IMAGE_HEIGHT;
        std::vector<cv::Mat> split_img = {
                cv::Mat(IMAGE_HEIGHT, IMAGE_WIDTH, CV_32FC1, data + channelLength * (index + 2)),     // Mat與result數(shù)據(jù)區(qū)域共享
                cv::Mat(IMAGE_HEIGHT, IMAGE_WIDTH, CV_32FC1, data + channelLength * (index + 1)),
                cv::Mat(IMAGE_HEIGHT, IMAGE_WIDTH, CV_32FC1, data + channelLength * index)
        };
        index += 3;
        cv::split(flt_img, split_img);		// 通道分離
    }
    return result;	// result與split_img的數(shù)據(jù)共享
}

2.手撕通道,暴力直接

std::vector<float> prepareImage(std::vector<cv::Mat> &vec_img) {
    std::vector<float> result(BATCH_SIZE * INPUT_CHANNEL * IMAGE_HEIGHT * IMAGE_WIDTH);
    float* data = result.data();
    int index = 0;
    int offset = IMAGE_WIDTH * IMAGE_HEIGHT;
    // 數(shù)據(jù)預處理
    for(const auto &img:vec_img){
        float ratio = IMAGE_WIDTH/float(img.cols) < IMAGE_HEIGHT/float(img.rows) ? IMAGE_WIDTH/float(img.cols) : IMAGE_HEIGHT/float(img.rows);
        cv::Mat rsz_img;
        cv::resize(img, rsz_img, cv::Size(), ratio, ratio, 0);
        cv::Mat flt_img(IMAGE_HEIGHT, IMAGE_WIDTH, CV_8UC3, cv::Scalar(128, 128, 128));
        rsz_img.copyTo(flt_img(cv::Rect(0, 0, rsz_img.cols, rsz_img.rows)));
        
        // 手撕三通道,填入data
        int i = 0;
        for (int row = 0; row < IMAGE_HEIGHT; ++row) {
            uchar* uc_pixel = flt_img.data + row * flt_img.step;
            for (int col = 0; col < IMAGE_WIDTH; ++col) {
                data[index * 3 * IMAGE_HEIGHT * IMAGE_WIDTH + i] = (float)uc_pixel[2]/255.;
                data[index * 3 * IMAGE_HEIGHT * IMAGE_WIDTH + i + IMAGE_HEIGHT * IMAGE_WIDTH] = (float)uc_pixel[1]/255.;
                data[index * 3 * IMAGE_HEIGHT * IMAGE_WIDTH+ i + 2 * IMAGE_HEIGHT * IMAGE_WIDTH] = (float)uc_pixel[0]/255.;
                uc_pixel += 3;
                ++i;
            }
        }
        index++;
    }
    return result;
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • django富文本編輯器的實現(xiàn)示例

    django富文本編輯器的實現(xiàn)示例

    這篇文章主要介紹了django富文本編輯器的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • django實現(xiàn)將后臺model對象轉(zhuǎn)換成json對象并傳遞給前端jquery

    django實現(xiàn)將后臺model對象轉(zhuǎn)換成json對象并傳遞給前端jquery

    這篇文章主要介紹了django實現(xiàn)將后臺model對象轉(zhuǎn)換成json對象并傳遞給前端jquery,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python實現(xiàn)提取和去除數(shù)據(jù)中包含關(guān)鍵詞的行

    Python實現(xiàn)提取和去除數(shù)據(jù)中包含關(guān)鍵詞的行

    這篇文章主要介紹了Python如何提取數(shù)據(jù)中包含關(guān)鍵詞的行已經(jīng)如何去除數(shù)據(jù)中包含關(guān)鍵詞的行,文中的示例代碼講解詳細,需要的可以參考一下
    2023-08-08
  • Python中ValueError報錯的原因和解決辦法

    Python中ValueError報錯的原因和解決辦法

    在Python編程中,ValueError是一種非常常見的異常類型,它通常發(fā)生在函數(shù)接收到一個有效類型但不適合該函數(shù)操作的值時,本文將深入探討ValueError的報錯原因、提供詳細的解決辦法,并通過豐富的代碼示例來加深理解,需要的朋友可以參考下
    2024-07-07
  • python自定義時鐘類、定時任務類

    python自定義時鐘類、定時任務類

    這篇文章主要為大家詳細介紹了Python自定義時鐘類、定時任務類,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python密碼學Base64編碼和解碼教程

    python密碼學Base64編碼和解碼教程

    這篇文章主要為大家介紹了python密碼學Base64編碼和解碼教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Python破解網(wǎng)站登錄密碼腳本

    Python破解網(wǎng)站登錄密碼腳本

    這篇文章主要為大家介紹一個簡單的Python暴力破解網(wǎng)站登錄密碼腳本,文中的過程講解詳細,對我們學習Python有一定的幫助,感興趣的可以學習一下
    2022-01-01
  • Python IDE Pycharm中的快捷鍵列表用法

    Python IDE Pycharm中的快捷鍵列表用法

    在本篇文章里小編給大家整理的是關(guān)于Python IDE Pycharm中的快捷鍵列表用法,需要的朋友們收藏下
    2019-08-08
  • 將python運行結(jié)果保存至本地文件中的示例講解

    將python運行結(jié)果保存至本地文件中的示例講解

    今天小編就為大家分享一篇將python運行結(jié)果保存至本地文件中的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python中的引用與copy介紹

    Python中的引用與copy介紹

    這篇文章主要以整型數(shù)據(jù)類型及列表為例,詳細的介紹了再Python中的引用與copy的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09

最新評論

河间市| 巴马| 民县| 兰考县| 康保县| 湘阴县| 新宾| 台前县| 咸阳市| 浦江县| 喜德县| 阿图什市| 龙南县| 广南县| 奎屯市| 定襄县| 慈溪市| 黄浦区| 霍邱县| 芜湖县| 晋江市| 兰西县| 都昌县| 盘山县| 同江市| 磐石市| 武邑县| 海淀区| 海原县| 盐源县| 枞阳县| 平顺县| 独山县| 韶山市| 昌图县| 阳山县| 仙居县| 灌阳县| 乌苏市| 南宫市| 田阳县|