如何在 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;
}
我有这张图片有 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;
}