opencv Mat::forEach 与 for 遍历效率的比较:for 更快

opencv Mat::forEach 与 for 遍历效率的比较:for 更快

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/features2d.hpp>

#include <ctime>
#include <iostream>
#include <string>

using namespace cv;
using namespace std;

int decoloring(cv::Mat& image, int midValue)
{
	clock_t t = clock();
	image.forEach<uchar>(
		[midValue, &image](uchar& point, const int* position) -> void
		{
			if (point >= midValue)
			{
				point = 255;
			}
			else
			{
				point = 0;
			}
		}
		);
	cout << "\nforeach time:" << clock() - t << endl;
	t = clock();

	int row = image.rows;
	int col = image.cols;
	int size = row * col;
	uchar* index = image.ptr(0);
	uchar* end = index + row * col;

	for (; index != end; index++)
	{	
		if (*index >= midValue)
		{
			*index = 255;
		}
		else
		{
			*index = 0;
		}
	}
	cout << "\nfor time:" << clock() - t << endl;
	return 0;
}

int main(int argc, char* argv[])
{
	string imageName = argv[1];
	Mat img = imread(imageName, IMREAD_GRAYSCALE);
	Mat imgDemo = img(Range(0, 500), Range(0, 500));

	Mat outputImg;
	int midv = 0;

	while (midv >= 0)
	{
		cout << "Enter mid: ";
		cin >> midv;
		imgDemo.copyTo(outputImg);
		decoloring(outputImg, midv);
		waitKey(0);
	}



	/*namedWindow("test", WINDOW_AUTOSIZE);
	imshow("test", imgDemo);*/
	waitKey(0);
	return 0;
}

结果截图
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值