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;
}

處理結果:
在這裏插入圖片描述

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