Opencv C++ 连通域逼近三角形

Opencv C++ 连通域逼近三角形

处理图片:
在这里插入图片描述

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

using namespace cv;
using namespace std;

void  get_approx(Mat binImg, vector<Point> contour, double length_p = 0.1)
{
	//计算连通域 周长;
	double dLenth = arcLength(contour, true);

	//计算逼近三角形长度;
	double dEpsilon = length_p * dLenth;
	
	//计算逼近三角形 获取点数组;
	vector<Point> contour_poly;
	approxPolyDP(contour, contour_poly, dEpsilon, true);

	//显示用图;
	Mat drawImage = Mat::zeros(binImg.size(), CV_8UC3);
	
	//绘制线条颜色;
	Scalar color = Scalar(0, 0, 255);

	//点数组点 转换成 连通域数组
	vector<vector<Point>> contours;
	contours.push_back(contour_poly);

	//显示连通域图片
	drawContours(drawImage, contours, 0, color, 2, 8, vector<Vec4i>(), 0, Point());

	imshow("逼近三角形", drawImage);
}

int main()
{
	//1.读取图片;
	Mat srcImg = imread("cc.jpg");
	imshow("原始图片", srcImg);

	//2.图片灰度化;
	Mat grayImg;
	cvtColor(srcImg, grayImg, COLOR_BGR2GRAY);
	//imshow("灰度图片", grayImg);

	//3.图片二值化;
	Mat dstImg;
	threshold(grayImg, dstImg, 127, 255, THRESH_BINARY);
	//imshow("二值图片", dstImg);

	//4.连通域查找;
	vector<vector<Point>> contours;
	vector<Vec4i> hierarchy;
	findContours(dstImg, contours, RETR_CCOMP, CHAIN_APPROX_SIMPLE);

	//5.连通域逼近三角形处理;
	get_approx(dstImg, contours[0], 0.002);
	waitKey(0);

	return 0;
}

处理结果:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章