日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言程序降低图像分辨率,减少OpenCV读取高分辨率图像的时间示例

發布時間:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言程序降低图像分辨率,减少OpenCV读取高分辨率图像的时间示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

意義

目前無論是工業上還是生活中相機的分辨率也會越來越高,無論是學術上還是工業上使用OpenCV進行圖像處理,特別是大批量處理的時候,讀取一張高分辨率圖像到內存中的時間減少的話對大批量的圖像處理的效率有大大的幫助,特別現在全景圖越來越普遍,好了,廢話不少說。

原理-分塊并行加載

大家都知道OpenCV有cvLoadImage或者imread都能夠讀取外存上的圖片到內存里面來,不過如果碰到大規模的圖片和高分辨率圖片進行加載的時候,比如一張4K或者8K圖片,受畫家畫大圖是分塊畫的想法,我們可以先把圖片給分割開來,比如4K的我們把它分割成4*4的小塊,然后利用OMP進行并行處理,這樣就能把讀一張4K利用OMP降低到讀一個更小的圖像塊的時間上,或者你也可以CMAKE出來OpenCV的源碼自己在內部進行并行加載,不過個人不太推薦動源碼再編譯。下面給出讀取一張全景圖用本身讀取和分塊異步讀取的時間比較代碼。

代碼

#include

#include

#include

#include

#include

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圖片的時間打印出來如下:

結論

時間快了三倍多,不過和我的想法出入還是挺大的,CPU是i7-4790 8核,按道理不會只快三倍多,后來查了相關的資料,道理也慢慢悟出來一點,因為這篇算工作乏累的隨筆,就不闡述很多了。

以上這篇減少OpenCV讀取高分辨率圖像的時間示例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的c语言程序降低图像分辨率,减少OpenCV读取高分辨率图像的时间示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。