cv::Mat和IPlImage

来源:互联网 发布:淘宝店铺授权凭证 编辑:程序博客网 时间:2024/05/16 14:35

cv::Mat转IplImage(只是复制了文件头,并未复制数据,一旦cv::Mat释放,IplImage将无法再访问数据)

cv::Mat mtx=imread(filename);IplImage *src=&IplImage(mtx);

或者:

mtx=cv::imread("C:\\Users\\Kevin\\Desktop\\test.bmp");IplImage* src=cvCreateImage(cvSize(mtx.cols,mtx.rows),8,1);
*src=mtx;


注意:最后不需要cvReleaseImage( &src ),否则会出错;第二种情况不好,出现了一个野指针,无法释放


cv::Mat mtx=cv::imread(filename.GetBuffer(filename.GetLength()),CV_LOAD_IMAGE_GRAYSCALE);//读灰度图时这个标志位一定是这个,否则读的矩阵的数据全为0IplImage*src=cvCloneImage(&(IplImage)mtx);uchar* data=(uchar*)src->imageData; int step=src->widthStep/sizeof(uchar); uchar*p; for (size_t i=0;i<mtx.rows;i++) {  for (size_t j=0;j<mtx.cols;j++)  {   int test=mtx.at<uchar>(i,j);   data[i*step+j]=test;   /*std::cout <<test<<"\n";*/  } }


IplImage转cv::Mat(可以选择是否复制数据)

IplImage* src=cvLoadImage(filename);cv::Mat mtx(src);





0 0