删除原始缓冲区时的opencv cvarrtoMat segfault

Posted

技术标签:

【中文标题】删除原始缓冲区时的opencv cvarrtoMat segfault【英文标题】:opencv cvarrtoMat segfault when deleting original buffer 【发布时间】:2013-07-29 15:07:11 【问题描述】:

我想将 IplImage 转换为 cv::Mat,除了在尝试删除原始缓冲区时出现一点段错误外,所有工作都可以,我将复制标志设置为 true ...

我确定我做错了什么,但我不知道......

这是我的工作:

IplImage* cvImage =  cvCreateImage( cvSize(width, height), IPL_DEPTH_8U, 3) ;

... fill cvImage data by mcopy from a blob ...

cv::Mat mat = cv::cvarrToMat(cvImage, true) ;

if (cvImage)
  delete (cvImage) ;

也许我误解了复制的东西,只有 tge cvImage->data 可以被删除,而不是整个对象?

谢谢:)

【问题讨论】:

【参考方案1】:

在opencv中,如果你用cvCreateImage创建了一个IplImage*,你不应该用delete释放它。试试:

cvReleaseImage( &cvImage );

因为 IplImage* 来自 C-api,您应该按照建议释放它们。你必须做&cvImage。您可以从文档中看到:http://docs.opencv.org/modules/core/doc/old_basic_structures.html?highlight=cvreleaseimage#releaseimage

【讨论】:

Ooh ok :o 我搜索了一个 cvDelete,但我看起来不太好,所以我错过了 cvRelease,我的错。非常感谢!

以上是关于删除原始缓冲区时的opencv cvarrtoMat segfault的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中使用 OpenCV 不扭曲点时的不良结果

如何在 OpenCV Mat 中保留固定的缓冲区大小?

QT6 C++ 中音频捕获原始数据的选项[关闭]

Python OpenCV - 如何删除窗口边框和标题

使用 python/opencv/深度学习从图像中删除给定位置的徽标/水印

OpenCV修复方法不会从IC图像中删除文本