【问题标题】:OpenCV process parts of an imageOpenCV 处理图像的一部分
【发布时间】:2012-07-27 17:52:42
【问题描述】:

我正在尝试使用带有 Alpha 通道的 PNG 从视频流中“屏蔽”当前帧。

我的 PNG 在我不想处理的区域有黑色像素,在其他区域有 alpha - 目前它保存了一个具有 4 个通道的 4 色图像,但它也可能是一个二进制图像。

我正在对图像进行背景减法和轮廓查找,所以我想如果我将我的“蒙版”图像中的黑色像素复制到当前图像中,那么在黑色区域中将找不到轮廓。这是一个好方法吗?如果是这样,我如何将黑色/非透明像素从一个 cv::Mat 复制到另一个之上?

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    您所描述的内容在我看来就像是使用图像蒙版。当 OpenCV 库中有这么多可用的方法支持屏蔽时,您会在 alpha 通道中执行此操作很奇怪。与其使用 alpha 通道,不如在您想找到轮廓的任何地方创建一个具有非零值的单独二进制图像?

    根据您使用的算法,您的假设是正确的,即您不会在黑色像素区域中找到轮廓。不幸的是,我不知道有任何有效的方法可以选择性地将像素从一个图像复制到另一个图像,而无需深入了解 Mat 结构的本质,以及从一个字节到另一个字节/像素到另一个像素的迭代。将上面介绍的掩码想法与您的预处理函数一起使用,然后将生成的二进制图像发送到 findContours 等,将允许您利用 OpenCV 库已经编写好的和优化的代码,并保留更多你头上的头发,它所属的地方;)。

    【讨论】:

    • docs.opencv.org/modules/core/doc/… Mat::copyTo(OutputArray m, InputArray mask) const
    • 谢谢,我确实开始查看行/列并复制值:)。是的,到目前为止,我非常喜欢 CV,尽管我渴望玩所有的东西,但我应该有一个学习结构。另外,我发现了另一个方便的功能:cv::addWeighted
    猜你喜欢
    • 2019-08-27
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    相关资源
    最近更新 更多