opencv如何标出轮廓缺口的像素值
时间: 2023-10-02 20:08:46 浏览: 67
opencv 轮廓检测
3星 · 编辑精心推荐
要标出轮廓缺口的像素值,可以使用OpenCV中的findContours函数来获取轮廓,并使用drawContours函数将轮廓绘制在图像上,然后使用cv::Scalar函数将缺口的像素值标记出来。
以下是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("image.jpg", 0);
// 二值化图像
Mat bw;
threshold(img, bw, 100, 255, THRESH_BINARY);
// 找到轮廓
vector<vector<Point>> contours;
findContours(bw, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 绘制轮廓
Mat contourImg = Mat::zeros(bw.size(), CV_8UC3);
for (int i = 0; i < contours.size(); i++)
{
drawContours(contourImg, contours, i, Scalar(0, 255, 0), 2);
}
imshow("Contours", contourImg);
// 标记缺口像素值
Mat markImg = Mat::zeros(bw.size(), CV_8UC1);
for (int i = 0; i < contours.size(); i++)
{
for (int j = 0; j < contours[i].size(); j++)
{
Point pt = contours[i][j];
if (img.at<uchar>(pt) == 0)
{
markImg.at<uchar>(pt) = 255;
}
}
}
imshow("Mark", markImg);
waitKey(0);
return 0;
}
```
在这个示例中,我们首先读取一张灰度图像,并将其二值化。然后,使用findContours函数找到轮廓,并使用drawContours函数将轮廓绘制在一个新的图像上。接下来,我们使用cv::Scalar函数将缺口的像素值标记出来,并在另一个新图像上显示。
阅读全文