初次上手opencv,简单遍历mat(CV_8UC3,约1000*3000像素),结果耗时约300ms。这个速度,不能忍!!!
百度下,大致结论:data访问 > ptr访问 > at访问。我就是ptr<vec3b>访问,按理不能这么慢啊,不得解。于是,索性试验下,实践出真知嘛。
实验环境及参数: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++) {
t1[i] = GetTickCount();
/*for (int y = 0; y < src.rows; y++) {
for (int x = 0; x < src.cols; x++) {
src.at<Vec3b>(y, x)[0] = 0;
src.at<Vec3b>(y, x)[1] = 0;
src.at<Vec3b>(y, x)[2] = 255;
}
}*/
/*for (int y = 0; y < src.rows; y++) {
Vec3b * p = src.ptr<Vec3b>(y);
for (int x = 0; x < src.cols; x++) {
p[x][0] = 0;
p[x][1] = 0;
p[x][2] = 255;
}
}*/
/*for (int y = 0; y <