代码之家  ›  专栏  ›  技术社区  ›  Tõnu Samuel

将矩形扩展100像素

  •  2
  • Tõnu Samuel  · 技术社区  · 13 年前

    我在C++中使用OpenCV 2.4.4,并且有Rect,我想把它放大x像素。OpenCV文档提供 nice example (寻找“将矩形扩展或缩小一定量”)如何在图像中使用 http://opencv.willowgarage.com/documentation/cpp/_images/math/a6f41031fb2ccaa600520bcbde63a8a9fcff9edf.png

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

    矩形矩形=旧矩形+-10; 矩形矩形=旧矩形-+10; 和 矩形=旧矩形±10;(我从中复制了这个符号 http://en.wikipedia.org/wiki/Plus-minus_sign 当然

    我在它们中的任何一个上都有难看的错误。

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

    2 回复  |  直到 13 年前
        1
  •  7
  •   Antonio    5 年前

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

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

    这将使两者都增加+20 宽度 身高 。如果您还想偏移 x y 点,然后从各个侧面实际充气,您可以执行以下操作:

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

    cv::Rect 具有 + (和其他)运算符过载,如果是 cv::Point 它会调整原点,如果是 cv::Size 它会调整 宽度 身高 .

        2
  •  6
  •   alrikai    13 年前

    这是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,direct+=size,rect-=size是4个不同的运算,因此:

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

    rect += size rect -= size 将改变矩形的大小,而不是它的坐标位置,这样 += 将增加矩形面积 -= 将减少它。