aihot  2017-05-29 07:32:05  OpenCV |   查看评论   

 获得像素点的值便可以更加灵活的进行图像处理,在OpenCV里可以通过cvGet2D()和cvSet2D()两个函数加上一个CvScalar结构体做到。

OpenCV中,CvScalar结构为:
  • typedef struct CvScalar
  • {
  •     double val[4];
  • }
  • CvScalar;
 
4个double型变量,算法处理时不至于被强制类型转换而降低精度了。
再来看读写函数的定义:
 
cvGet2D 获得某个点的值, idx0=hight 行值, idx1=width 列值。
CVAPI(CvScalar) cvGet2D( const CvArr* arr, int idx0, int idx1 );
 
cvSet2D 给某个点赋值。
CVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );
 
有上可见,cvGet2D的返回类型和cvSet2D中value的类型都是CvScalar,这样定义一个CvScalar变量再调用函数就OK了。
 
OpenCV中像素点读写例子:
  • int main(int argc, char **argv)
  • {
  •     IplImage *img = cvLoadImage(argv[1], 1);
  •     CvScalar pixel;
  •     for (int i = 0; i < img->height; ++i)
  •     {
  •         for (int j = 0; j < img->width; ++j)
  •         {
  •             //获得像素的RGB值并显示, 注意内存中存储顺序是BGR
  •             pixel = cvGet2D(img, i, j);
  •             printf("B=%f,G=%f,R=%f/t", pixel.val[0], pixel.val[1], pixel.val[2]);
  •             //修改各点的值
  •             pixel.val[0] = 0;
  •             pixel.val[1] = 0;
  •             pixel.val[2] = 0;
  •             cvSet2D(img, i, j, pixel);
  •         }
  •     }
  •     cvNamedWindow("image", 1);
  •     cvShowImage("image", img);
  •     cvWaitKey(0);
  •     cvDestroyWindow("image");
  •     cvReleaseImage(&img);
  •     return 0;
  • }
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV像素点处理

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