opencv - 使用 openCV(.release() 和 =Mat() 释放 Mat 图像不起作用)

标签 opencv image-processing computer-vision

我试图从我的程序中释放一个 Mat 图像,但是,无论我如何尝试,当我单击“处理按钮”处理另一个图像(来自加载或捕捉图像)时,仍然会出现相同的图像(结果) .将始终显示旧结果。

我必须关闭整个程序,打开下一张我要处理的图像,然后单击“处理按钮”以获得实际结果。但是,这并不理想,因为我希望我的程序立即处理我加载或捕捉的图像,而不必关闭整个程序(或者更确切地说停止运行并再次单击运行)

我从谷歌搜索的大部分结果都建议了这些方法:

imagep.release(); //where imagep is the image after going through processing
imagep=Mat();

更新:
我的代码是沿着这条线走的。在我的 program.h 文件中,图像和图像 p 并声明如下:
class program : public QMainWindow
{
    Q_OBJECT

public:
    program(QWidget *parent = 0);
    ~program();
    cv::Mat image, imagep; //original image and image processed

.cpp 文件中按钮的编码如下所示:
imagep = image.clone();      //also tried: imagep=image, and imagep=image+0 already.
.
.
.
processing/segmenting steps
.
.
cv::imshow("new image", imagep);
cvWaitKey(10);
imagep=Mat();     //also tried cvDestroyWindow("new image"), //imagep.release(); 

imagep 的图片设置(我根据图像处理的结果更改了像素的值。)通过以下方式创建:
for (int i=0; i< imagep.rows; ++i)
    {
        for (int j=0; j<imagep.cols; ++j)
    {
        //imagep.at<cv::Vec3b>(i,j)= v_char[i]; Note that this is commented. This method doesn't work, hence the below method. But it doesn't work too.
            Vec3b temp=v_char[i];
        imagep.at<cv::Vec3b>(i,j)[0]=temp[0];
        imagep.at<cv::Vec3b>(i,j)[1]=temp[1];
        imagep.at<cv::Vec3b>(i,j)[2]=temp[2];



    }
}   

但是,这些方法不起作用。关于如何发布 Mat 图像的任何建议?

最佳答案

waitKey(-1) 等待键盘输入,而 waitKey(10) 使用 10 毫秒来更新 UI,然后传递给进一步的控制;看来您的问题不是发布而是正确更新。

通常不需要释放 Mat(尽管我在 Java 中看到了一些 release() 调用),只需重新分配它。您的问题也可能与引用数量为零时被杀死的智能指​​针有关,但如果没有看到您的代码就很难说。

在创建、分配和声明 Mats 时会发生一些棘手的事情。另外,请注意,例如 Mat m = n,仅复制引用,但 Mat m = n + 0,复制整个对象。

关于opencv - 使用 openCV(.release() 和 =Mat() 释放 Mat 图像不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22118078/

相关文章:

opencv - 什么是暴力描述符匹配器?

python - SWIG 链接器: undefined symbol :_ZN2cv8fastFreeEPv (cv::fastFree(void*))

ios - 确定 UIImage 的主要颜色和次要颜色

python - cv2 方法的解释结果 : phaseCorrelate? | python

python - 功能无法正常使用(OpenCV Python)

c++ - OpenCV中矩阵中的元素总和?

python - 类型错误 : structural_similarity() takes 2 positional arguments but 8 were given

python - 如何识别左键和右键单击以及0xFF

javascript - 使用 Canvas 和 JS 将图像转换为单色并用彩色替换黑色

language-agnostic - 图像处理库