将cv :: Mat的资源窃取到IplImage

时间:2013-04-24 17:15:57

标签: c++ c opencv

下面是将cv :: Mat资源复制到IplImage

的源代码
//copy the resource of src into IplImage
void copy_mat_Ipl(cv::Mat const &src, IplImage **dst)
{
         IplImage* old = *dst;
        IplImage temp_src = src;
        *dst = cvCloneImage(&temp_src);
        cvReleaseImage(&old);
}

但我不想复制它,我想要的是从cv :: Mat中窃取资源 我必须窃取它,因为cv :: Mat可能是函数中的本地对象 如果我不偷,但做这样的事情

void move_mat_to_Ipl(cv::Mat &src, IplImage **dst)
{
         IplImage* old = *dst;            
        **dst = src;
        cvReleaseImage(&old);
}

void some_function(IplImage **dst)
{
   cv::Mat src;
   //do something
   move_mat_to_Ipl(src, dst);
}

src的资源是免费的,然后dst将保持一个悬空指针 我怎么能偷走cv :: Mat的资源?

1 个答案:

答案 0 :(得分:0)

您必须更改move_mat_to_Ipl function

IplImage ** move_mat_to_Ipl(cv::Mat &src, IplImage **dst)
{
    IplImage* old = *dst;
    IplImage temp_src = src;
    **dst = src;
    cvReleaseImage(&old);

    return **dst;
}

这将return ** dst,然后你就可以将它传递给另一个函数