使用C++编写,利用opencv如何在图片的不同区域自动画出不同颜色的线
时间: 2023-05-28 14:01:35 浏览: 95
opencv实现图像颜色空间转换
以下是使用opencv在图片的不同区域自动画出不同颜色线的示例代码:
```c
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
// 读取图像
Mat src = imread(argv[1], 1);
// 强制转换成灰度图像
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
// 二值化处理
Mat binary;
threshold(gray, binary, 100, 255, THRESH_BINARY);
// 寻找轮廓
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
// 画线
RNG rng(12345);
Mat drawing = Mat::zeros(src.size(), CV_8UC3);
for (size_t i = 0; i < contours.size(); i++)
{
Scalar color = Scalar(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256));
drawContours(drawing, contours, (int)i, color, 2, LINE_8, hierarchy, 0, Point());
}
// 显示图像
namedWindow("Contours", WINDOW_NORMAL);
imshow("Contours", drawing);
waitKey(0);
return 0;
}
```
在这个例子中,我们首先读取一个彩色图像,然后将其转换成灰度图像和二值图像。接下来,我们使用`findContours`函数寻找轮廓。最后,利用`drawContours`函数在图像中绘制不同颜色的线条。我们使用了`RNG`类来生成随机颜色。最后,我们将绘制好的图像显示在窗口中。
这个例子只是简单地绘制了所有轮廓。如果您需要在不同区域绘制不同颜色的线条,可以通过修改`drawContours`函数中颜色参数的取值来实现。例如,可以根据轮廓包含的像素数量或密度来确定需要绘制的颜色。
阅读全文