对每个边缘求最小外接矩形,通过最小矩形提取每个边缘

#include 
#include 
using namespace std;
using namespace cv;
int main()
{
	Mat src; //源图像
	Mat tmp; //临时图像
	Mat dst_bw; //去掉背景后的目标二值图像
	Mat dst_contours;//轮廓图像
	src=imread("E:\\单板图片\\求孔洞数和孔洞面积\\aa.jpg");//未标题-1.jpg1-1.jpg  131.png
	namedWindow("原图");
	imshow("原图",src);
	cvtColor(src,dst_bw,CV_RGB2GRAY);
	threshold( dst_bw, dst_bw ,180, 255, CV_THRESH_BINARY);
	namedWindow("dst_bw");
	imshow("dst_bw",dst_bw);
	vector> contours;
	vector hierarchy;
	findContours(dst_bw,contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
	drawContours(src,contours,-1,Scalar(0,255,0),8);

	for (int i=0;i	{
		vector points;
		RotatedRect box=minAreaRect(Mat(contours[i]));
		Point2f vertex[4];
		box.points(vertex);
		for (int j=0;j<4;j++)
		{
			line(src,vertex[j],vertex[(j+1)%4],Scalar(0,0,255),2,CV_AA);
		}
		Mat imgROI=src(Rect(vertex[1],vertex[3]));
		char image_name[30];
		sprintf(image_name, "%s_%d_%s", "roi",i, ".jpg");
		imwrite(image_name,imgROI);
	}
	imshow("效果图",src);
	waitKey(0);
	return 0;
}

对每个边缘求最小外接矩形,通过最小矩形提取每个边缘_第1张图片

对每个边缘求最小外接矩形,通过最小矩形提取每个边缘_第2张图片

你可能感兴趣的:(图像处理(opencv))