Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV Mat到IplImage*的转换_Opencv - Fatal编程技术网

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