OpenCV基础问题汇总

举报
ShaderJoy 发表于 2021/12/29 23:05:07 2021/12/29
【摘要】 OpenCV读取图像RGB各分量的方法 1. 直接定位到imageData,用数组的形式读取  unsigned char b=(unsigned char )m_image.GetImage()->imageData[0]; unsigned char g=(unsigned char )m...

OpenCV读取图像RGB各分量的方法

1. 直接定位到imageData,用数组的形式读取 


  
  1. unsigned char b=(unsigned char )m_image.GetImage()->imageData[0];
  2. unsigned char g=(unsigned char )m_image.GetImage()->imageData[1];
  3. unsigned char r=(unsigned char )m_image.GetImage()->imageData[2];

2. 使用CvScalar


  
  1. IplImage *img=cvLoadImage("c://kobe.bmp",1);
  2. CvScalar s;
  3. for(int i=0; i<img->height; i++)
  4. {
  5. for(int j=0; j<img->width; j++)
  6. {
  7. s=cvGet2D(img,i,j); // get the (i,j) pixel value
  8. printf("B=%f, G=%f, R=%f ",s.val[0],s.val[1],s.val[2]);
  9. s.val[0]=111;
  10. s.val[1]=111;
  11. s.val[2]=111;
  12. cvSet2D(img,i,j,s); //set the (i,j) pixel value
  13. }
  14. }

cvGet2D()与cvSet2D() 的参数问题

对于图像中的某一像素点 P(x, y), 在我们正常的坐标系中,x代表其横坐标,y代表其纵坐标,而在opencv的函数 cvGet2D()与cvSet2D() 中,却行不通。cvGet2D() 的函数原型是 : CvScalar  cvGet2D (const CvArr * arr, int idx0, int idx1); 函数返回的是一个CvScalar 容器,其参数中也有两个方向的坐标,但跟我们平常习惯的坐标不一样的是,idx0代表是的行,即高度,对应于我们平常坐标系的y, idx1代表的是列,即宽度,对应于我们平常坐标系的x,cvSet2D() 也类似。所以在使用cvSet2D() 与 cvGet2D() 时,千万要注意坐标的顺序。

cv::Mat 与 CvMat的区别

cv::Mat和CvMat都可以表示图像数据,只是却不明白他们之间到底什么区别,用CV::MAT 每次都有56byte的内存泄露。后来查看了源码才知道原来cv::Mat是一个类(Class),而CvMat是一个Struct。前者除了几个成员变量之外还有很多的成员函数和重载函数,可以实现很多的图像数据处理功能,而后者只有几个成员变量,要对其成员进行一些处理,需要借用别的函数。


  
  1. typedef struct CvMat
  2. {
  3. int type;
  4. int step;
  5. /* for internal use only */
  6. int* refcount;
  7. int hdr_refcount;
  8. union //数据的指针
  9. {
  10. uchar* ptr;
  11. short* s;
  12. int* i;
  13. float* fl;
  14. double* db;
  15. } data;
  16. #ifdef __cplusplus
  17. union
  18. {
  19. int rows;
  20. int height;
  21. };
  22. union
  23. {
  24. int cols;
  25. int width;
  26. };
  27. #else
  28. int rows;
  29. int cols;
  30. #endif
  31. }
  32. CvMat;
  33. /*CvMat中的data数据只是矩阵数据的首地址,分配的内存大小为行列乘积。对该内存块的操作需要调用函数,也可以使用指针索引。*/


文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/8618649

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。