【问题标题】:OpenCV rectangle draw functionOpenCV 矩形绘制函数
【发布时间】:2018-12-21 08:57:43
【问题描述】:

OpenCV 方便绘制rectangle 提供矩形的左上角和右下角。我想知道使用哪种算法来绘制矩形,例如,我所知道的所有多边形填充算法都会填充整个多边形,即boundary fill algorithm 等。
我没有找到任何填充的颜色填充算法只有边界。如果我遗漏了什么或者有这样的算法,请写下来。

【问题讨论】:

  • 一个矩形不过是一组4条直线,它们依次相互垂直,所以画一个矩形可以认为是画了4条线段。我不确定 OpenCV 是如何在内部实现它的,但是这种线路方法是有意义的
  • 从给定的两个点我们可以很容易地找到一个矩形的四个顶点。因此我们可以使用它们轻松绘制线段。
  • 没错@Zdar ...但我想问的是openCV从根本上是如何做到的...因为我想找出并在互联网上没有得到任何东西。也请提及来源。
  • 是的@krishna ...这就是它可以做到的方式,这是基本概念,但OpenCV如何做到这一点是我最关心的,因为我正在查看一些颜色填充算法,但似乎没有一个工作这边走。有一些方法也喜欢将一条线视为一个细长的矩形并使用多边形填充算法......但是 OpneCV 究竟是如何实现它的呢?

标签: algorithm opencv colors computer-vision


【解决方案1】:

来自source code

void rectangle( InputOutputArray _img, Point pt1, Point pt2,
                const Scalar& color, int thickness,
                int lineType, int shift )
{
    CV_INSTRUMENT_REGION()
Mat img = _img.getMat();

if( lineType == CV_AA && img.depth() != CV_8U )
    lineType = 8;

CV_Assert( thickness <= MAX_THICKNESS );
CV_Assert( 0 <= shift && shift <= XY_SHIFT );

double buf[4];
scalarToRawData(color, buf, img.type(), 0);

Point2l pt[4];

pt[0] = pt1;
pt[1].x = pt2.x;
pt[1].y = pt1.y;
pt[2] = pt2;
pt[3].x = pt1.x;
pt[3].y = pt2.y;

if( thickness >= 0 )
    PolyLine( img, pt, 4, true, buf, thickness, lineType, shift );
else
    FillConvexPoly( img, pt, 4, buf, lineType, shift );
}

在这里,我们可以看到如果传递了厚度,它使用PolyLine绘制矩形。

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2020-11-08
    • 2016-08-23
    • 2014-06-07
    相关资源
    最近更新 更多