本系列代码托管于:https://github.com/chintsan-code/opencv4-tutorials
本篇使用的项目为:findContours
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, const char** argv) {
	Mat src = imread("../sample/morph3.png");
	if (src.empty()) {
		cout << "could not load image..." << endl;
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);
	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 | THRESH_OTSU);
	// 轮廓发现
	imshow("binary", binary);
	vector<vector<Point>> contours;
	vector<Vec4i> hirearchy;
	findContours(binary, contours, hirearchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
	//drawContours(src, contours, -1, Scalar(0, 0, 255), 2, 8);
	RNG rng(123456);
	for (size_t t = 0; t < contours.size(); t++) {
		Scalar color = Scalar(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256));
		drawContours(src, contours, t, color, 2, 8);
	}
	
	imshow("find contours demo", src);
	waitKey(0);
	destroyAllWindows();
	return 0;
}

findContours:发现轮廓
void findContours( InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point());
- image:输入图像,8-bit单通道。一般输入二值图。如果不是二值图,会将非零像素视为1,0像素保持0,因此也就相当于二值图输入
 - contours:输出轮廓。每个轮廓都是点的集合,一张图像中又有多个轮廓,因此可以用
std::vector<std::vector<cv::point>>来存储图像中的所有轮廓 - hierarchy:层次结构的拓扑信息。
std::vector<cv::Vec4i> - mode:轮廓发现算法
- RETR_EXTERNAL:找最大外接轮廓
 - RETR_LIST
 - RETR_TREE
 
 - method:轮廓编码方式
- CHAIN_APPROX_NONE
 - CHAIN_APPROX_SIMPLE
 
 - offset:轮廓的可选偏移量
 
drawContours:画轮廓
drawContours( InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness = 1, int lineType = LINE_8, InputArray hierarchy = noArray(), int maxLevel = INT_MAX, Point offset = Point() );
- image:绘制的背景,在image上绘制轮廓
 - contours:需要绘制的轮廓集合
 - contourIdx:想要绘制的轮廓contours的索引index。如果要绘制所有轮廓,则输入负数
 - color:颜色
 - thickness:线宽
 - lineType:绘制时的渲染方式
- LINE_4
 - LINE_8
 - LINE_AA:反锯齿。会更加平滑
 
 - hierarchy:可选参数
 - maxLevel:可选参数
 - offset:可选参数
 
                    
                
                        
                        
        
			
			
			
			
			
评论 (0)