opencv Mat遍歷速度實驗

2021-08-21 08:51:24 字數 1452 閱讀 6659

初次上手opencv,簡單遍歷mat(cv_8uc3,約1000*3000畫素),結果耗時約300ms。這個速度,不能忍!!!

實驗環境及引數:vs2017,opencv-3.4.1,mat(cv_8uc3)

2組寬高:10000*10000, 2000*2000

實驗**:

mat src;

src.create(2000, 2000, cv_8uc3);

bool is = src.iscontinuous();

size_t step = src.step;

size_t step1 = src.step1();

size_t total = src.total();

cstring text;

dword t1[50], t2[50];

for (int i = 0; i < 50; i++)

}*//*for (int y = 0; y < src.rows; y++)

}*//*for (int y = 0; y < src.rows; y++)

}*//*for (int y = 0; y < src.rows; y++)

}*//*for (int y = 0; y < src.rows; y++)

}*/for (int x = 0; x < total; x++)

t2[i] = gettickcount();

} dword t3, t4 = 0;

for (int i = 0; i < 50; i++)

imshow("src", src);

afxmessagebox(text);

實驗結果:

版本debug

debug

release

release

寬高10000*10000

2000*2000

10000*10000

2000*2000

方法1-

9031000

8.02

方法25255

20563

3.44

方法3259

10.9

633.74

方法4256

10.6

984.68

方法5243

10.28

1004.06

方法6285

12.16

924.38

個人結論:

1. at訪問效能太低,直接不考慮;

2. ptr在debug下的效能也是不能接受的,但release下等同ptr,不清楚優化機制是否跟平台或者機器有關,有風險,且不利於debug,不推薦;

3. ptr綜合最優,力薦;

4. data訪問等同ptr,其實2者都是直接指標操作,效能自然不相上下,但data訪問沒有寬高結構性,不推薦;

opencv Mat型別初始化,遍歷,賦值

1.opencv mat型別定義 cv mat a cv size w,h cv 8uc1 單通道 cv mat b cv mat cv size w,h cv 8uc3 3通道每個矩陣元素包含3個uchar值 對於維數較小的mat型別,直接定義賦值方法如下 mat mtest mat 4,1 0....

Java Map遍歷速度最優解

hashmap的遍歷有兩種常用的方法,那就是使用keyset及entryset來進行遍歷,但兩者的遍歷速度是有差別的 第一種 map map new hashmap iterator iter map.entryset iterator while iter.hasnext 效率高,以後一定要使用此...

Java Map遍歷速度最優解

hashmap的遍歷有兩種常用的方法,那就是使用keyset及entryset來進行遍歷,但兩者的遍歷速度是有差別的 第一種 map map new hashmap iterator iter map.entryset iterator while iter.hasnext 效率高,以後一定要使用此...