gpt4 book ai didi

c++ - OpenCV中是否有任何函数可以找到两个cv::Rect的交集、并集和补集

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:05:32 26 4
gpt4 key购买 nike

OpenCV中有没有求两个cv::Rect的交集、并集和补集的函数?

我可以自己写,但我希望 OpenCV 中有一些快速的函数可以做到这一点。

搜索文档,没有任何作用。

编辑 1

正如一些人所解释的,rects 没有并集和补集,所以我查看了可用的函数,发现在我的情况下,我可以使用

rect = rect1 | rect2 (minimum area rectangle containing rect1 and rect2 )

而不是 union 。对于补充,我需要一个类似的函数定义为:

 rect=rect1 || rect2 (maximum area rectangle containing rect1 but not rect2 )

如下图所示:

enter image description here enter image description here

rect1 为黄色,rect2 为红色,result 为蓝色。

编写此函数最快的方法是什么?

最佳答案

来自 OpenCV doc :

In addition to the class members, the following operations on rectangles are implemented:

rect = rect +/- point (shifting a rectangle by a certain offset)
rect = rect +/- size (expanding or shrinking a rectangle by a certain amount)

rect += point, rect -= point, rect += size, rect -= size (augmenting operations)
rect = rect1 & rect2 (rectangle intersection)
rect = rect1 | rect2 (minimum area rectangle containing rect2 and rect3 )
rect &= rect1, rect |= rect1 (and the corresponding augmenting operations)
rect == rect1, rect != rect1 (rectangle comparison)

这些只涵盖总是产生另一个矩形的运算符,所以这里没有补码。在那里你必须带着面具工作……

由于您要求补充和 union ,我不确定 cv::Rect 是否适合使用。也许口罩更适合满足您的需求。

对于 CV_8UC1 掩码(mask1mask2 必须具有相同的大小):

union = mask1+mask2
complement = 255-mask
intersection = mask1.mul(mask2)

要从 cv::Rect 创建掩码,您可以执行以下操作:

cv::Mat mask = cv::Mat(yourImage.size(), CV_8UC1, cv::Scalar(0)); // creates an empty mask of your image size
cv::rectangle(mask, yourRect, cv::Scalar(255), -1);

但请记住,cv::Rect 在内存消耗和计算速度方面都更加高效。

因此,如果您可以重新表述您的问题以仅使用矩形 ROI(因此不可能进行补码),我真的会以这种方式使用它而不是使用 mask !

关于c++ - OpenCV中是否有任何函数可以找到两个cv::Rect的交集、并集和补集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30507141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com