如何在 OpenCV C++ 中填充两行之间的区域?

How can I fill the region between 2 lines in OpenCV c++?

我有这张图片有 2 条曲线:

如何填充红色和蓝色曲线之间的区域?

这是获取它的简单方法和代码:

  • 逐像素检查每一行
  • 如果遇到2次非黑色像素索引值,则保存这些点
  • 在这两点之间填充所需的颜色

这是输出和代码:

输出:

代码:

#include <iostream>
#include <opencv2/highgui.hpp>


int main()
{

    cv::Mat img = cv::imread("/ur/img/dir/images.png");

    for(int i=0; i<img.rows; i++)
    {
        bool started = 0;
        int startX = 0, stopX = 0;
        for(int j=0; j<img.cols; j++)
        {


                if(img.at<cv::Vec3b>(cv::Point(j,i))[0] != 0)
                {
                    started = 1;

                    if(startX)
                        stopX = j;

                }
                else if(started)
                {
                    if(startX == 0)
                    startX = j;

                    started = 0;
                }



        }

        if(startX && stopX)
        {
            for(int k=startX; k<stopX; k++)
            {
                img.at<cv::Vec3b>(cv::Point(k,i))[0] = 0;
                img.at<cv::Vec3b>(cv::Point(k,i))[1] = 255;
                img.at<cv::Vec3b>(cv::Point(k,i))[2] = 255;

            }
        }
    }

    cv::imshow("Test",img);
    cv::waitKey(0);


    return 0;
}