【问题标题】:c++, opencv: Is it safe to use the same Mat for both source and destination images in filtering operation?c++,opencv:在过滤操作中对源图像和目标图像使用相同的 Mat 是否安全?
【发布时间】:2014-05-05 09:06:56
【问题描述】:

过滤操作涉及卷积,在(x,y) 位置的过滤值也将取决于像素(x-a,y-b)a,b >0 的强度。

因此,直接将同一图像用作目标会导致意外行为,因为在计算过程中,我采用的是一些已经过滤的数据而不是原始数据。

问题

opencv 是否在 cv::GaussianBlur(.)cv::blur 等函数内部管理此问题?对 srcdst 参数引用相同的 Mat 是否安全? 谢谢

【问题讨论】:

  • 没有问题,因为如果你注意到函数,它是通过引用传递的,因此,整个数组 / Mat 在函数结束时被重写。 (这是最简单的解释)
  • 对不起,我不明白你的评论。问题是如果在过滤过程中重写了处理图像

标签: c++ opencv filtering


【解决方案1】:

是的,这样做不会有任何问题。我做过几次这样的事情。 openCV 会自动处理它。

我测试了以下代码,它运行良好:

int main(int argc, char* argv[])
{
    Mat src;
    src = imread("myImage.jpeg", 1);
    imshow("src", src); //Original src

    cv::blur( src, src, Size(25,25) , Point(-1,-1), BORDER_DEFAULT );

    imshow("dst", src); //src after blurring

    waitKey(0);
}

【讨论】:

  • 感谢您的回复。当我这样使用它时,我也看到了一个很好的结果,但实际上我无法判断它是否真的是它看起来的样子。所以是的,它看起来不错,但你知道,我需要确定这一点。你确定没有任何问题(也使用其他功能)?再次感谢
  • 是的,OpenCV 中的大多数图像过滤器都允许相同的输入和输出。但是在转换图像(例如彩色到灰度)时要小心,你需要两个垫子
  • @mb_:只要转换时使用的两张图片的类型相同,就没有问题。但是,如果您想将具有 3 个通道的 color image 转换为具有单通道的 grayimage,那么您将遇到分段错误。所以,请确定您的src 是否也适合成为dst
  • 是的,好吧,但我不是在谈论尺寸或通道问题,我知道图像的尺寸和深度必须相等,我的问题是过滤操作需要另一个图像,过滤不能在单个图像中完成。所以我想知道 opencv 是否在内部使用了第二张图片,或者我是否只需要输入不同的图片。
  • 您能否链接到 openCV 文档以确认 dst 图像与其中一个 src 图像相同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多