Extract Array of Coordinates from Line (C++ OpenCV)

后端 未结 2 1478
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-21 06:10

Using C++ / OpenCV I\'ve drawn a line on an image using cv::line and now I\'m trying to extract an array of its coordinates. I\'ve tried assigning the line to <

2条回答
  •  眼角桃花
    2020-12-21 06:13

    You have at least a couple of options. Assuming that you know the two endpoints A and Bof the line:

    1) Draw the line with line(...) on an zero initialized mask of the same size of your image, and retrieve the points on the line (which will be the only white points on the mask) with findNonZero(...).

    2) Use LineIterator to retrieve the points, without the need of drawing them nor creating a mask.

    You need to store your points in a vector.

    #include 
    #include 
    
    using namespace std;
    using namespace cv;
    
    int main(int, char** argv)
    {
        Mat3b image(100,100); // Image will contain your original rgb image
    
        // Line endpoints:
        Point A(10,20);
        Point B(50,80);
    
    
        // Method: 1) Create a mask
        Mat1b mask(image.size(), uchar(0));
        line(mask, A, B, Scalar(255));
    
        vector points1;
        findNonZero(mask, points1);
    
        // Method: 2) Use LineIterator
        LineIterator lit(image, A, B);
    
        vector points2;
        points2.reserve(lit.count);
        for (int i = 0; i < lit.count; ++i, ++lit)
        {
            points2.push_back(lit.pos());
        }
    
        // points1 and points2 contains the same points now!
    
        return 0;
    }
    

提交回复
热议问题