图像分割与描述综合示例
- 视觉算法的基本开发步骤
- 使用OpenCV完成图像分割及区域描述
一、问题分析与思路
解决思路:
- 图像采集(取到图像)
- 图像预处理
- 基于灰度的阈值分割
- 图像特征描述及目标分析
- 得到最终结果
找到目标轮廓
image, contours, hierarchy = cv.findContours( image, mode, method[, contours[, hierarchy[,offset]]] )
image : 单通道图像矩阵,可以是灰度图,但更常用的是经过边缘检测算子处理后的二值图像;
contours :定义为“vector<vector> contours”,是一个轮廓列表;
hierarchy : 存在嵌套轮廓时,分别为第i个轮廓的后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号;
mode : 定义轮廓的检索模式, 包括CV_RETR_EXTERNAL只检测最外围轮廓, CV_RETR_LIST检测所有轮廓,但不建立等级关系等;
method : 包括CV_CHAIN_APPROX_SIMPLE 仅保存轮廓的拐点信息,把所有轮廓拐点处的点保存入contours等;
offset : 所有的轮廓信息相对于原始图像对应点的偏移量, 缺省不设置。
相关函数 (Python)
D-P法多边形拟合
approxCurve = cv.approxPolyDP( curve, epsilon, closed[, approxCurve] )
计算轮廓线长度
retval = cv.arcLength( curve, closed )
计算轮廓面积
retval = cv.contourArea( contour[, oriented] )
计算轮廓包围矩形(水平的)
retval = cv.boundingRect( array )
计算轮廓包围矩形(斜的)
retval = cv.minAreaRect( points )
计算轮廓拟合椭圆
retval = cv.fitElllipse( points )