我在 C++ 中使用 OpenCV 2.4.4,并且我想让 Rect 变大 x 像素。OpenCV 文档提供了很好的示例(查找“按一定量扩展或收缩矩形”)如何在图像中使用它http://opencv.willowgarage.com/documentation/cpp/_images/math/a6f41031fb2ccaa600520bcbde63a8a9fcff9edf.png
凉爽的。唯一的问题是我不知道如何在实际的 C++ 代码中输入它。我试过:
rect rect=oldrect+-10; rect rect=oldrect-+10; 和 rect rect=oldrect±10;(为了确定,我从http://en.wikipedia.org/wiki/Plus-minus_sign复制了这个符号。
我在其中任何一个上都遇到了丑陋的错误。
有人可以解释一下,我应该使用的那个聪明的符号是什么,不可能包含在 HTML 中,所以它被嵌入为图像。
如果您希望Rect在保持相同原点的同时扩展它(只需增加其width和height),您可以使用:
cv::Size inflationSize(20, 20);
myRect += inflationSize;
Run Code Online (Sandbox Code Playgroud)
这会将 +20 添加到width和height。如果您还想抵消x和y点并实际从四面八方膨胀矩形,您可以执行以下操作:
constexpr int inflation = 20;
myRect += cv::Point(-inflation/2, -inflation/2);
myRect += cv::Size(inflation, inflation);
Run Code Online (Sandbox Code Playgroud)
cv::Rect使+(和其他)运算符重载,如果是 acv::Point则调整原点,如果是 acv::Size则调整width和height。
这就是 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;
Run Code Online (Sandbox Code Playgroud)
因此,要执行将 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 -= 5和rect.y -= 5)。
rect += size并且rect -= size会改变矩形的大小而不是它的坐标位置,这样+=会增加矩形区域并-=减少它。
| 归档时间: |
|
| 查看次数: |
9986 次 |
| 最近记录: |