cv::Mat和IPlImage

本文详细介绍了OpenCV中cv::Mat与IplImage之间的转换方法,包括不复制数据的情况及可能出现的问题,以及如何从IplImage转换到cv::Mat时选择是否复制数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);//读灰度图时这个标志位一定是这个,否则读的矩阵的数据全为0

IplImage*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);





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值