opencv Mat遍历速度实验

博主通过实验发现,遍历OpenCV的Mat对象时,at访问性能最低,ptr<vec3b>在Debug模式下较慢,但在Release模式下与ptr<uchar>相当。推荐使用ptr<uchar>进行遍历,因其在Release模式下性能最佳,同时data访问虽然性能接近,但由于缺乏结构信息而不推荐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初次上手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 <
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值