OpenCV Mat转IplImage的陷阱
2014-01-19 22:38
225 查看
自OpenCV2.0.0以后,引进了Mat类型。Mat使用更为方便,且和Android的Bitmap转换也方便。(此处指的是Android在java层转int[]后再传给jni里,在jni里将int[]转为Mat.) 但有时候新旧工程为了对接,不得已要将Mat转为IplImage。关于Mat转为IplImage,常见的方法有以下几种:
第一种方式:
第二种方式:
第三种方式:
完整测试程序如下:
可以看到,第一种方法转出来的结果图片错误了,左右倒置了。这是我在移植OpenCV到JNI层中无意发现的,贴出来供大家参考。个人推荐第二种方法进行转换。
第一种方式:
//第一种转换方式 IplImage *imgIpl1 = cvCreateImage(cvSize(w, h), 8, 3); Mat temp = preMat.clone(); imgIpl1->imageData = (char *)temp.data;
第二种方式:
//第二种转换方式 IplImage imgIpl2 = preMat.operator _IplImage();
第三种方式:
//第三种转换方式 IplImage imgIpl3 = (IplImage)(preMat);
完整测试程序如下:
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv;
int main() {测试结果:
string s = "Hello world!";
s.c_str();
s.data();
cout << s << endl;
Mat preMat = imread("F:\\1.jpg");
int w = preMat.cols;
int h = preMat.rows;
cout<<"原始尺寸 w = "<<w<<"h = "<<h<<endl;
//第一种转换方式 IplImage *imgIpl1 = cvCreateImage(cvSize(w, h), 8, 3); Mat temp = preMat.clone(); imgIpl1->imageData = (char *)temp.data;
//第二种转换方式 IplImage imgIpl2 = preMat.operator _IplImage();
//第三种转换方式 IplImage imgIpl3 = (IplImage)(preMat);
cvNamedWindow("imgIpl1");
cvShowImage("imgIpl1", imgIpl1);
namedWindow("imgIpl2", 1);
cvShowImage("imgIpl2", &imgIpl2);
namedWindow("imgIpl3", 1);
cvShowImage("imgIpl3", &imgIpl3);
waitKey(0);
return 0;
}
可以看到,第一种方法转出来的结果图片错误了,左右倒置了。这是我在移植OpenCV到JNI层中无意发现的,贴出来供大家参考。个人推荐第二种方法进行转换。
相关文章推荐
- OpenCV Mat转IplImage陷阱
- 【OpenCV学习笔记】【类型转换】一(IplImage和cv::Mat的类型相互转换)
- opencv之深拷贝及浅拷贝,IplImage装换为Mat
- opencv中Mat与IplImage,CVMat类型之间转换
- opencv中C接口与C++接口的相互转换(Mat 和 CvMat,IplImage相互转化)
- opencv中Mat与IplImage,CVMat类型之间转换
- OpenCV——Mat、CvMat、IplImage类型浅析
- 【重要总结】opencv Mat&IplImage
- OpenCV——Mat、CvMat、IplImage类型浅析
- opencv IplImage 和 Mat互相转换 以及其它类型的转换(持续更新)
- 图像处理之opencv---mat、cvmat、IplImage之间的转换
- opencv中mat,cvmat,Iplimage结构体定义以及格式互相转换
- OpenCV中Mat与IplImage和CvMat类型之间的相互转换
- opencv中Mat与IplImage,CVMat类型之间转换
- OpenCV(C++接口)学习笔记4-Mat::operator = 的陷阱
- OpenCv2 学习笔记(3) Mat、CvMat和IplImage的相互转化
- opencv中Mat与IplImage,CVMat类型之间转换
- opencv中Mat与IplImage,CVMat类型之间转换
- OpenCv中cv::Mat和IplImage,CvMat之间的转换
- opencv Mat与Iplimage相互转化