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