opencv中c版本和c++版本区别体验

举报
ShaderJoy 发表于 2021/12/29 23:49:18 2021/12/29
【摘要】       1.  显示窗口大小的改变方法不同。   在c版本中,定义一个窗口时用cvNamedWindow.   比如说cvNamedWindow(“src”,0);后面的参数为0表示窗口大小可以手动改变,否则窗口的大小是自适应图片大小的。   而在c++版本中定义一个窗口用name...

      1.  显示窗口大小的改变方法不同。

  在c版本中,定义一个窗口时用cvNamedWindow.

  比如说cvNamedWindow(“src”,0);后面的参数为0表示窗口大小可以手动改变,否则窗口的大小是自适应图片大小的。

  而在c++版本中定义一个窗口用namedWindow.

  比如说namedWindow(“src”,1);不管后面第二个参数是多少,都不能手动更改窗口的大小,因为它的尺寸是根据图片大小自动生成的。

     并且要看到手动调整窗口大小的效果,还需要配合cvShowImage(“src”,img);

  也就是说如果后面显示用c++版本的imshow(“src”,img);也是看不到手动调整图片大小的效果的。

 

  2.  显示图片的函数不同。

  在opencv的c版本中,显示图片用cvShowImage;

  比如说,cvShowImage(“src”,img);

  并且这里的img是IplImage*类型,所以如果你定义的img是Mat类型的话就用不了,因为程序不能自动将Mat类型转换成IplImage*类型。

  在opencv的c++版本中,显示图片用的是imshow;

  比如说,imshow(“src”,img);

  当然这里的img就是Mat类型了。也就是说如果这里的img用IplImage*就不行了,程序不能自动将IplImage*转换成Mat类型。

  通过上面2点应该注意到,如果要手动改变图片的尺寸,就必须cvNamedWidow(“src”,0);

  cvShowImage(“src”,img)一起用。其中img是IplImage*类型

     当然cvNamedWindow(“src”,0)也可以和imshow(“src”,img)一起用,其中img是Mat类型,但是这样达不到自动改变窗口大小的目的。

  因为一般情况下,namedWindow(“src”,1)和imshow(“src”,img)一起用的

 


  
  1.  下面来看看IplImage结构体内部:
  2. int nSize
  3. int ID
  4. int nChannels
  5. int alphaChannel
  6. int depth
  7. char colorModel [4]
  8. char channelSeq [4]
  9. int dataOrder
  10. int origin
  11. int align
  12. int width
  13. int height
  14. struct _IplROI * roi
  15. struct _IplImage * maskROI
  16. void * imageId
  17. struct _IplTileInfo * tileInfo
  18. int imageSize
  19. char * imageData
  20. int widthStep
  21. int BorderMode [4]
  22. int BorderConst [4]
  23. char * imageDataOrigin


 
  而Mat结构体包含一个Mat头部(头部中记录的是矩阵的大小,存储方式等等)和一个指向矩阵的指针。所以2者还是有很大区别的,所以说程序不能自动将他们转换是有原因的,因为Mat结构更加复杂

  3. 读取图片的方式不同。

  在c版本中读取图片用的是cvLoadImage;

  比如说cvLoadImage(“lena.jpg”);

  在c++版本中,读取图片用的是imread;

  比如说imread(“lena.jpg”);

  当然这2种的lena图片都是放入工程目录下的。

  但是这里有一点非常不同的是,cvLoadImage()中的参数为const char*类型,而imread()中的参数是const &string型,这两种是完全不同的,在opencv中也不能自动转换好他们,混合使用c和c++函数一起编写opencv代码时要小心。

 

  4. 路径表示方式不同。

  在c版本中路径之间用2个双右斜线,即”\\”。用1个斜线”\”会报错。

  在c++版本中路径之间用1个或者2个甚至更多个斜线都是可以的。

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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