Mat类型图像元素访问

Mat类型是新版本opencv中最常用的也是很方便计算的图像类型。下面介绍几种访问Mat类型图像元素的方法:

方法一:

for( int i=0;i<row;i++ )  
{  
	for( int j=0;j<col;j++ )  
	{  
		Vec3i bgr = srcimg.at<Vec3b>(i,j);  //用Vec3b也行  
		Vec3i luv = dstimg.at<Vec3b>(i,j);
		for (int k=0;k<3;k++)
		{
			rgbchannels[k].pixels.push_back(bgr.val[k]);
			luvchannels[k].pixels.push_back(luv.val[k]);
		} 	
	}  
}  

方法二:

for( int i=0;i<row;i++ )  
{  
	for( int j=0;j<col;j++ )  
	{  
		//[row, col]像素的第 1 通道地址被 * 解析(blue通道)
		luvchannels[0].pixels.push_back(*(dstimg.data + dstimg.step[0] * row + dstimg.step[1] * col)) ;
		//[row, col]像素的第 2 通道地址被 * 解析(green通道), 关于elemSize1函数的更多描述请见 Fn1 里所列的博文链接
		luvchannels[1].pixels.push_back(*(dstimg.data + dstimg.step[0] * row + dstimg.step[1] * col + dstimg.elemSize1()));
		//[row, col]像素的第 3 通道地址被 * 解析(red通道)
		luvchannels[2].pixels.push_back(*(dstimg.data + dstimg.step[0] * row + dstimg.step[1] * col + dstimg.elemSize1() * 2));
	}  
}  
方法三:

for( int i=0;i<row;i++ )  
{  
	for( int j=0;j<col;j++ )  
	{  
		luvchannels[0].pixels.push_back(*(dstimg.ptr(i)+j*dstimg.channels()+0)) ;
		luvchannels[1].pixels.push_back(*(dstimg.ptr(i)+j*dstimg.channels()+1)) ;
		luvchannels[2].pixels.push_back(*(dstimg.ptr(i)+j*dstimg.channels()+2)) ;
	}  
} 


其中的变量定义为:

public:
	class channel
	{
	public:
		vector<double> pixels;
	public:
		channel()
		{
			pixels.clear();
		}
		~channel(){};
	};

public:
	channel luvchannels[3];
	channel rgbchannels[3];
第二种方法运行时报错,暂时不知道不知道为什么。前两种亲测可用。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值