初次上手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 效率高,以後一定要使用此...