cvNamedWindow与namedWindow,cvShowImage与inshow的区别

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结构体内部:   

int nSize  

 int ID  

int nChannels  

int alphaChannel  

int depth  

char colorModel [4]  

 char channelSeq [4]  

int dataOrder  

int origin  

 int align  

 int width  

int height  

 struct _IplROI * roi  

 struct _IplImage * maskROI  

 void * imageId  

struct _IplTileInfo * tileInfo  

 int imageSize  

char * imageData  

 int widthStep  

 int BorderMode [4]  

 int BorderConst [4]  

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个甚至更多个斜线都是可以的。
---------------------  
作者:代码里的文学  
来源:CSDN  
原文:https://blog.csdn.net/qq_34622997/article/details/74549977  
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值