opencv2.x新数据结构cv::Mat访问元素的方法

opencv2.0以后c++接口的API函数成为一种趋势,常用的IplImage与cvMat数据结构也淡出,新数据结构cv::Mat成为新宠。目前国内,新数据结构cv::Mat的资料还是比较少的。新数据结构cv::Mat元素的访问(读取、存取)的方法对很多初学者来还是很不明了的。

现在综合一些资料,在此抛砖引玉。

//http://blog.csdn.net/moc062066
//20111128
#include "opencv2/opencv.hpp"
#include <iostream>

using namespace std;
using namespace cv;
 
int main(int argc,char** argv)
{

	const char* filename = "google.png";
	
	//CV_8UC3
	//相应的CV_8SC3---Vec3s
	//相应的CV_16UC3---Vec3w
	Mat mat_CV_8UC3 = imread(filename,IMREAD_COLOR);
   for( size_t nrow = 0; nrow < mat_CV_8UC3.rows; nrow++)
    {
	   for(size_t ncol = 0; ncol < mat_CV_8UC3.cols; ncol++)
	   {
		   Vec3i bgr = mat_CV_8UC3.at<Vec3b>(nrow,ncol);//用Vec3b也行
		   cout   << "("<<bgr.val[0]<<","
				   <<bgr.val[1]<<","
				   <<bgr.val[2]<<")";
	   }
	   cout << endl;
    }
    
    for( size_t nrow = 0; nrow < mat_CV_8UC3.rows; nrow++)
    {
    	uchar* data = mat_CV_8UC3.ptr<uchar>(nrow);
	   for(size_t ncol = 0; ncol < mat_CV_8UC3.cols * mat_CV_8UC3.channels(); ncol++)
	   {
			cout << int( data[ncol] ) ;
	   }
	   cout << endl;
    }

   //------CV_8UC1----------start---
   //
	Mat mat_CV_8UC1 = imread(filename,IMREAD_GRAYSCALE);
   for( size_t nrow = 0; nrow < mat_CV_8UC1.rows; nrow++)
   {
	   for(size_t ncol = 0; ncol < mat_CV_8UC1.cols; ncol++)
	   {
		   uchar val = mat_CV_8UC1.at<uchar>(nrow,ncol);
		   //
		   cout << (int(val) > 200 ? 1 :0) ;//cout<<int(val)<< endl ;
	   }
	   cout << endl ;
   }
   cout << endl;

   	for ( size_t row = 0 ; row < mat_CV_8UC1.rows ; ++row) 
   	{
		uchar* ptr = mat_CV_8UC1.ptr<uchar>(row);
		for ( size_t col = 0 ; col < mat_CV_8UC1.cols ; ++col) 
		{
			cout << ( int(ptr[col]) > 200 ? 1 :0) ;//cout<<int(val)<< endl ;
		}
		cout << "\n" ;
	}
	cout << endl;
	
   MatIterator_<uchar> it = mat_CV_8UC1.begin<uchar>(), it_end = mat_CV_8UC1.end<uchar>();
   for(int cnt = 1; it != it_end; ++it)
    {
      	cout << ( int(*it) > 200 ? 1 : 0) ;
      	if( (cnt++ % mat_CV_8UC1.cols) ==0 )
      		cout << endl;    	
    }
   //------CV_8UC1----------end---   

    
  return 0;
}

参考:1

所有图像:

 结果:

(245,245,245)(245,245,245)(245,245
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值