OpenCV的Mat格式和IplImage格式的使用

最近频繁地在使用OpenCV的Mat图像格式和IplImage图像格式,所以记录一下他们的一些使用区别。

首先贴出来互相转换的方法:

Mat转IplImage如下:

	//浅拷贝
	Mat mat_Image = imshow("1.bmp");
	IplImage image = cvIplImage(mat_Image);
    //深拷贝
    IplImage* temp;
    //temp = cvCreateImage(cvSize(mat_Image.rows, mat_Image.cols), 8, 1);//灰度图
    temp = cvCloneImage(&image);

IplImage转Mat如下:

    IplImage* src=cvLoadImage("temp.jpg");
    Mat ImgTemp;
    ImgTemp=cvarrToMat(src);//浅拷贝
    Mat Img = ImgTemp.clone();//利用clone()再次深拷贝

加载的方法的区别

	//Mat的加载方法
	//第一个参数代表图片路径和名称,第二个参数代表0-》灰度加载、1-》彩色加载
	Mat mat = imread("1.bmp", 0);

	//IplImage的加载方法
	IPlImage *Image = cvLoadImage("1.bmp",0);

设置窗口大小和显示

	//Mat的图片只能用imshow()来显示
	Mat mat = imread("1.bmp", 0);
    namedWindow("mat",0);  //第二个参数 0-》窗口可以自定义大小、1-》自适应图片大小
    resizeWindow("mat",800,600);
    imshow("mat", mat);

	//IplImage的图片只能用cvShowImage()来显示
	IPlImage *Image = cvLoadImage("1.bmp",0);
	cvNamedWindow("Image", 0);
    cvResizeWindow("Image", cvSize(1200, 900));
    cvShowImage("Image", Image);
	
	/*
	备注:无论是namedWindow和cvNamedWindow,还是resizeWindow和cvResizeWindow,
	用法和效果是一样的,对于窗口的操作不分图片格式。
	*/

有坑记录

cvNamedWindow,cvShowImage与多线程的问题

当在子线程中调用cvShowImage,会出现窗口无响应无显示的现象,无论是否在子线程中提前调用cvNamedWindow。

而在主线程中提前调用cvNamedWindow,后在子线程中调用cvShowImage则显示正常。

若在子线程调用cvShowImage前关闭cvNamedWindow产生的窗口,同样会造成窗口无响应无显示。
参考链接:https://blog.csdn.net/qwertyuj/article/details/7406456

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值