二、openCV4.9.0教程 获取像素方法

一、at方法

        获取单通道像素:int pv = image.at<uchar>(row, col);

        获取三通道像素:Vec3b bgr = image.at<Vec3b>(row, col);

for (int row = 0; row < h; row++)
	{
		for (int  col = 0; col < w; col++)
		{
			Vec3b& v = image.at<Vec3b>(row,col);    
			v[0] = 255 - v[0];
			v[1] = 255 - v[1];
			v[2] = 255 - v[2];
		}
	}

二、ptr指针

        uchar* current_row = image.ptr<uchar>(row);

for (int row = 0; row < h; row++)
{
	uchar* cur = image.ptr<uchar>(row);
	for (int col = 0; col < w; col++)
	{
		if (dims == 1) {
			*cur++ = 255 - *cur;
		}
		if (dims == 3) {
			*cur++ = 255 - *cur;
			*cur++ = 255 - *cur;
			*cur++ = 255 - *cur;
		}
	}
}

三、迭代器

  Mat_<Vec3b>::iterator it = image.begin<Vec3b>(); 不能使用 Mat_<uchar>::iterator it

for (Mat_<Vec3b>::iterator it = image.begin<Vec3b>(); it != image.end<Vec3b>(); ++it)
{
  Vec3b& cc= (*it);
    cc[0] = 255 - cc[0];//蓝色通道置反色;
    cc[1] = 255 - cc[1];//蓝色通道置反色;
    cc[2] = 255 - cc[2];//蓝色通道置反色;            
}

   从个人执行的时间分析,迭代器效率最低,指针效率最高,因为它少了Vec3b转换。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值