Opencv-(33)图像轮廓计算

图像轮廓计算

轮廓面积与周长

基本原理

Opencv-(33)图像轮廓计算_第1张图片
opencvAPI有具体的实现方法

代码演示

计算周长

计算面积contourArea(contours[t])

Opencv-(33)图像轮廓计算_第2张图片

计算周长arcLength(contours[t], true);

Opencv-(33)图像轮廓计算_第3张图片

#include
#include
using namespace cv;
using namespace std;
int main() {
	Mat src = imread("D:/ps/te.png");
	if (src.empty())
	{
		cout << "could not find the image";
		return -1;
	}
	//namedWindow("input", WINDOW_FREERATIO);
	//imshow("input", src);
	//二值化
	GaussianBlur(src, src, Size(3, 3), 0);
	Mat gray, binary;
	cvtColor(src, gray, COLOR_BGR2GRAY);
	threshold(gray, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);
	//轮廓发现
	imshow("binary", binary);
	vector<vector<Point>>contours;
	vector<Vec4i>hierachy;
	//CHAIN_APPROX_SIMPLE 和CHAIN_APPROX_NONE 顶点  全连
	findContours(binary, contours, hierachy, RETR_TREE, CHAIN_APPROX_NONE, Point());
	for (size_t t = 0; t < contours.size(); t++) {
	//面积
		double area = contourArea(contours[t]);
	//周长
		double len = arcLength(contours[t], true); 
		if (area < 100 || len < 10) continue;
		//绘制成椭圆
	/*	RotatedRect rrt = minAreaRect(contours[t]); 
	 ellipse(src, rrt, Scalar(255, 0, 0), 2, 8);*/


		//Rect box = boundingRect(contours[t]);
		//获取ROI
		//rectangle(src, box, Scalar(0, 0, 255), 2, 8, 0);
		printf("area : %.2f,contour lenght : %.2f\n", area, len); 
		drawContours(src, contours, t, Scalar(0, 0,255), 2, 8);
	
	}

	//drawContours(src, contours, -1, Scalar(0, 0, 255), 2, 8);
	imshow("find contours demo", src);
	waitKey(0);
	destroyAllWindows();
	return 0;
}


Opencv-(33)图像轮廓计算_第4张图片
矩形
Opencv-(33)图像轮廓计算_第5张图片椭圆
Opencv-(33)图像轮廓计算_第6张图片

最大/最小外接轮廓

你可能感兴趣的:(笔记,opencv,VS,opencv,计算机视觉,c++)