aihot  2017-05-01 07:57:30  OpenCV |   查看评论   

 OpenCV学习笔记(四十三)——存取像素值操作汇总core

目录











对Mat内数据的各种读写操作进行了速度的比较,都是我自己想到的方法,感觉不够系统,这次整理了下思路,参考了文献,把能想到的方法进行了汇总,希望能对大家有所帮助。

1.存取单个像素值

最通常的方法就是

  1. img.at<uchar>(i,j) = 255;  
  2. img.at<Vec3b>(i,j)[0] = 255;  


如果你觉得at操作显得太笨重了,不想用Mat这个类,也可以考虑使用轻量级的Mat_类,使用重载操作符()实现取元素的操作。

  1. cv::Mat_<uchar> im2= img; // im2是指图像
  2.    im2(50,100)= 0; // 访问行50和列100

2.用指针扫描一幅图像

对于一幅图像的扫描,用at就显得不太好了,还是是用指针的操作方法更加推荐。先介绍一种上一讲提到过的

  1. for (int j=0; j<nl; j++)  
  2. {  
  3.         uchar* data= image.ptr<uchar>(j);  
  4.         for (int i=0; i<nc; i++)  
  5.        {                   
  6.                   data[i] = 255;  
  7.         }  
  8. }  


更高效的扫描连续图像的做法可能是把W*H的衣服图像看成是一个1*(w*h)的一个一维数组,这个想法是不是有点奇葩,这里要利用isContinuous这个函数判断图像内的像素是否填充满,使用方法如下:

  1. if (img.isContinuous())  
  2. {  
  3.         nc = img.rows*img.cols*img.channels();  
  4. }  
  5. uchar* data = img.ptr<uchar>(0);  
  6. for (int i=0; i<nc; i++)  
  7. {  
  8.         data[i] = 255;  
  9. }  
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV学习笔记(四十三)——存取像素值操作汇总core

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]