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

猜你喜欢

转载自blog.csdn.net/weixin_44650358/article/details/125780003