OpenCV Mat到IplImage*的转换
我有一个指向图像的指针:OpenCV Mat到IplImage*的转换,opencv,Opencv,我有一个指向图像的指针: IplImage *img; 已转换为Mat Mat mt(img); 然后,将Mat发送到函数,该函数获取对Mat的引用作为输入void f(Mat&m) 现在我想将Mat数据复制回原始图像 你有什么建议吗 最好的 阿里您的答案可以在以下文档中找到: 编辑: 第一个代码区域的前半部分实际上讨论了您已经拥有的复制构造函数 第一个代码区的后半部分回答了您的问题。为清晰起见,复制如下 //Convert to IplImage or CvMat, no data cop
IplImage *img;
已转换为Mat
Mat mt(img);
然后,将Mat
发送到函数,该函数获取对Mat
的引用作为输入void f(Mat&m)代码>
现在我想将Mat
数据复制回原始图像
你有什么建议吗
最好的
阿里您的答案可以在以下文档中找到:
编辑:
第一个代码区域的前半部分实际上讨论了您已经拥有的复制构造函数
第一个代码区的后半部分回答了您的问题。为清晰起见,复制如下
//Convert to IplImage or CvMat, no data copying
IplImage ipl_img = img;
CvMat cvmat = img; // convert cv::Mat -> CvMat
对于以下情况:
double algorithm(IplImage* imgin)
{
//blabla
return erg;
}
我使用以下方法调用该函数:
cv::Mat image = cv::imread("image.bmp");
double erg = algorithm(&image.operator IplImage());
我做了一些测试,图像对象将如何管理内存。运算符IplImage()
将仅为IplImage
构造标头。也许这会有用?您可以使用以下表格:
您的代码:
plImage*img
Mat mt(img)
f(mt)
现在将Mat数据复制回原始图像
img->imageData=(char*)mt.data
您还可以复制数据而不是指针:
memcpy(mt.data,img->imageData,(mt.rows*mt.cols))
(mt.rows*mt.cols)是将mt中的所有数据复制到img时应使用的大小
希望我帮了忙备忘单上说的是复制构造函数,而不是我要找的。我有一个已经填充的图像和一个垫子,应该复制到图像的数据部分。顺便说一句,谢谢你的回答。一个指向IplImage的指针已经传递给了一个函数。在函数内部,一个Mat中填充了一些数据。如果我只使用*ipl_image=mat;没有数据将被复制,只是会有一个标题转换,当我从函数返回时,由于Mat内存空间被释放,指向它的指针也是无用的。我正在寻找类似ipl_img->copy(Mat)的东西,它将具有相同大小图像的Mat数据复制到ipl_图像数据中。事实上,这是我的代码:code
int-test(IplImage**srcImage,int-num_-images){向量图像(num_-images);for(int-I=0;I
类似的东西应该可以工作,但我正在寻找(inti=0;i(&srcImage[i]);srcImage[i]=new-IplImage(images[i]);}
转换Mat-mt(img)
不复制图像数据,因此只要不执行重新分配的操作(例如,将mt分配给独立的其他Mat),就不必执行任何操作。
cv::Mat image = cv::imread("image.bmp");
double erg = algorithm(&image.operator IplImage());