opencv中Mat IplImage互相转换的问题及部分常用功能

opencv中 Mat、IplImage、IplImage之间的相互转换

1. Mat /IplImage / IplImage*格式转换

//Mat->IplImage
IplImage *frame;
Mat frmImg = cv::imread("A.jpg");;
frame = &IplImage(frmImg);
//IplImage  frame;
Mat frmImg = cv::imread("a.jpg");;
frame = frmImg;

2.IplImage-> Mat

//IplImage->Mat
IplImage* iplimg =cvLoadImage("a.jpg");
cv::Mat matimg;
matimg = cv::Mat(iplimg);

3.CvMat转Mat

//使用Mat的构造函数:Mat::Mat(const CvMat* m, bool copyData=false);	默认情况下copyData为false
CvMat* a;
//注意:以下三种效果一致,均为浅拷贝
Mat b(a);	//a "copy" to b
Mat b(a, false);	//a "copy" to b
Mat b = a;	//a "copy" to b

//注意:当将参数copyData设为true后,则为深拷贝(复制整个图像数据)
Mat b = Mat(a, true); //a copy to b

4.Mat转CvMat

//注意:浅拷贝
Mat a;
CvMat b = a; //a "copy" to b

//注意:深拷贝
Mat a;
CvMat *b;
CvMat temp = a; //转化为CvMat类型,而不是复制数据
cvCopy(&temp, b); //真正复制数据


备注:imread() 与cvLoadimage()

 **( filename, -1 ); 默认读取图像的原通道数
**( filename, 0 ); 强制转化读取图像为灰度图

**( filename, 1 ); 读取彩色图

  1.         Mat rgbImg(img.size(),CV_8UC3);  
  2.         cvtColor(img, rgbImg, COLOR_GRAY2BGR); 
  3. cvtColor(img, img, CV_BGR2GRAY);

常用小功能

1、opencv中抠图函数

cv::Rect cutRoi;

cv::Mat SaveImg = img(cutRoi);

不同数据格式之间的转换

1. char类型的打印    char ss; printf("%u",ss);
2.float型转char* 型
char *textshow = new char[30];
float scoretext = 0.5;
sprintf(textshow, "%.8f ", scoretext);


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页