2

我在 C++ 中使用 OpenCV 2.4.4,并且我想让 Rect 放大 x 个像素。OpenCV 文档提供了很好的示例(查找“将矩形扩大或缩小一定量”)如何在图像http://opencv.willowgarage.com/documentation/cpp/_images/math/a6f41031fb2ccaa600520bcbde63a8a9fcff9edf.png中使用它

凉爽的。唯一的问题我不知道如何在实际的 C++ 代码中输入它。我试过了:

矩形矩形=oldrect+-10;矩形矩形=oldrect-+10;和矩形rect=oldrect±10;(为了确定,我从http://en.wikipedia.org/wiki/Plus-minus_sign复制了这个符号。

我在其中任何一个上都遇到了丑陋的错误。

有人可以解释一下,我应该使用什么聪明的符号并且不可能包含在 HTML 中,所以它被嵌入为图像。

4

2 回答 2

7

如果您希望Rect在保持相同原点的同时扩展 (只需增加其widthand height),您可以使用:

cv::Size inflationSize(20, 20);
myRect += inflationSize;

这将为width和增加+20 height。如果您还想偏移xy点并从各个方面实际膨胀矩形,您可以执行以下操作:

constexpr int inflation = 20;
myRect += cv::Point(-inflation/2, -inflation/2);
myRect += cv::Size(inflation, inflation);

cv::Rect+(和其他)运算符重载,这样如果它是 acv::Point它将调整原点,如果它是 acv::Size它将调整widthand height

于 2016-07-09T00:07:23.440 回答
6

这就是 C++ 中“+=”的数学符号。您实际上并不直接使用 ± 。例如:

//make a rectangle that's 10x10 and centered at (0, 0)
cv::Rect rect(0, 0, 10, 10);
std::cout << "Original Rectangle: " << rect.area() << std::endl;

//manual addition to rectangle dimensions -- this will make bigger_rect be 20x20
cv::Rect bigger_rect = rect;
bigger_rect.height += 10;
bigger_rect.width += 10;
std::cout << "Bigger Rectangle: " << bigger_rect.area() << std::endl;

//other method of adding to a rectangle's area -- this will increase rect to be 20x20        
rect += cv::Size(10, 10);
std::cout << rect.area() << std::endl;

因此,要执行将 10 添加到矩形的高度和宽度的示例,请将±符号视为等效于+= cv::Size(width, height)

嗯,你或多或少有正确的想法......

编辑:关于您的评论,我应该详细说明: rect += point, rect -= point, rect += size, rect -= size 是 4 个不同的操作,例如:

rect += pointand rect -= point: 逐点移动矩形,其中 point 指的是一个cv::Point对象,即你可以将一个点声明为: cv::Point pt(5, 5);,然后如果你这样做rect += pt,它将移动矩形的 x 和 y 成员(默认情况下,这些是指矩形的左上角坐标)乘以 5 - 例如,它相当于做rect.x += 5and rect.y += 5。for 的情况rect -= point是相同的,尽管是减法而不是加法(sorect.x -= 5rect.y -= 5)。

rect += size并且rect -= size会改变矩形的大小而不是它的坐标位置,这样+=会增加矩形区域并-=减少它。

于 2013-04-11T06:22:43.210 回答