【问题标题】:Get coordinates of contours in OpenCV在 OpenCV 中获取轮廓坐标
【发布时间】:2015-07-24 14:47:24
【问题描述】:

假设我有以下输出图像:

基本上,我有视频流,我只想在输出图像中获取矩形的坐标。这是我的 C++ 代码:

while(1)
    {
        capture >> frame;

        if(frame.empty())
            break;

        cv::cvtColor( frame, gray, CV_BGR2GRAY ); // Grayscale image

        Canny( gray, canny_output, thresh, thresh * 2, 3 );

        // Find contours
        findContours( canny_output, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

        // Draw contours
        Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 );

        for( int i = 0; i< contours.size(); i++ )
        {
            Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
            drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );
        }

        cv::imshow( "w", drawing );

        waitKey(20); // waits to display frame

    }

谢谢。

【问题讨论】:

  • 请注意您的矩形被分割成 2 或 3 个轮廓(您会看到,因为它们具有不同的颜色)。看起来您的输入材料不够好(例如边缘图像中的小孔或某事)。

标签: c++ opencv pattern-recognition


【解决方案1】:

documentationOutputArrayOfArrays contours是关键。

contours – 检测到的轮廓。每个轮廓都存储为一个点向量。

所以,你有一个vector&lt; vector&lt;Point&gt; &gt; contoursvector&lt;Point&gt;(inside) 是一个轮廓的坐标,每个轮廓都存储在一个vector中。

例如,要知道第 5 个向量,它是 vector&lt;Point&gt; fifthcontour = contours.at(4);

你在那个向量中有坐标。

您可以通过以下方式访问这些坐标:

for (int i = 0; i < fifthcontour.size(); i++) {
    Point coordinate_i_ofcontour = fifthcontour[i];
    cout << endl << "contour with coordinates: x = " << coordinate_i_ofcontour.x << " y = " << coordinate_i_ofcontour.y;
}

【讨论】:

  • 这应该是Point coordinate_i_ofcontour = fifthcontour[i]; ?
【解决方案2】:

看opencv文档中find contours函数的定义,看参数(link):

void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())

参数:here

看看轮廓,就像 Rafa 说的,每个轮廓都存储在一个点向量中,每个点向量都存储在一个向量中,因此,通过在外部向量中行走,然后在内部向量中行走,您会发现你想要的分数。

但是,如果您只想检测较大的轮廓,您可能需要使用CV_RETR_EXTERNAL 作为模式参数,因为它只会检测大部分外部轮廓(大矩形)。

如果您仍希望保持较小的轮廓,则可以使用 CV_RETR_TREE 并使用层次结构:Using hierarchy contours

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多