這篇文章給大家分享的是有關如何減少OpenCV讀取高分辨率圖像的時間的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創新互聯建站-專業網站定制、快速模板網站建設、高性價比高臺網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式高臺網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋高臺地區。費用合理售后完善,10余年實體公司更值得信賴。
原理-分塊并行加載
大家都知道OpenCV有cvLoadImage或者imread都能夠讀取外存上的圖片到內存里面來,不過如果碰到大規模的圖片和高分辨率圖片進行加載的時候,比如一張4K或者8K圖片,受畫家畫大圖是分塊畫的想法,我們可以先把圖片給分割開來,比如4K的我們把它分割成4*4的小塊,然后利用OMP進行并行處理,這樣就能把讀一張4K利用OMP降低到讀一個更小的圖像塊的時間上,或者你也可以CMAKE出來OpenCV的源碼自己在內部進行并行加載,不過個人不太推薦動源碼再編譯。下面給出讀取一張全景圖用本身讀取和分塊異步讀取的時間比較代碼。
代碼
#include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include <time.h> #include <omp.h> using namespace cv; IplImage *showImage = cvCreateImage(cvSize(4096, 2048), IPL_DEPTH_8U, 3); time_t t_start, t_end; int main() { t_start = clock(); IplImage *image = cvLoadImage("0.jpg"); t_end = clock(); printf("直接讀取一張4K圖片花費時間為:%d\n", t_end - t_start); t_start = t_end; char imgName[4][4][40]; IplImage *splitImg[4][4]; #pragma omp parallel for for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 4; j++) { sprintf_s(imgName[i][j], "%d%d%s", i, j, ".jpg"); splitImg[i-1][j-1] = cvLoadImage(imgName[i][j]); cvSetImageROI(showImage, cvRect((j - 1) * 4096 / 4, (i - 1) * 2048 / 4, 4096 / 4, 2048 / 4)); cvCopy(splitImg[i - 1][j - 1], showImage); cvResetImageROI(showImage); } } t_end = clock(); printf("分步讀取一張4K圖片花費時間為:%d", t_end - t_start); cvShowImage("test.jpg", showImage); cvWaitKey(1); getchar(); return 1; }
在Visual Studio里面配置一下OpenMP支持
然后讀取這張4K圖片的時間打印出來如下:
感謝各位的閱讀!關于“如何減少OpenCV讀取高分辨率圖像的時間”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
網頁標題:如何減少OpenCV讀取高分辨率圖像的時間
URL網址:http://vcdvsql.cn/article48/jhioep.html
成都網站建設公司_創新互聯,為您提供品牌網站制作、定制網站、電子商務、網站制作、網站收錄、全網營銷推廣
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯