一、图像轮廓
图像轮廓是具有相同颜色或灰度的连续点的曲线.轮廓在形状分析和物体的检测和识别中很有用。
轮廓的作用:.用于图形分析、物体的识别和检测
注意点:
为了检测的准确性,需要先对图像进行二值化或Canny操作。
画轮廓时会修改输入的图像,如果之后想继续使用原始图像,应该将原始图像储存到其他变量中。
二、查找轮廓
contours[ˈkɒntʊəz] 轮廓;外形;曲线;弯曲的表面
findContours(image, contours,hierarchy,mode, method[, contours[, hierarchy[, offset]]])
contours,定义为“vector<vector<Point>> contours”,是一个向量,并且是一个双重向量,向量内每个元素保存了一组由连续的Point点构成的点的集合的向量,每一组Point点集就是一个轮廓。 有多少轮廓,向量contours就有多少元素。
hierarchy,定义为“vector<Vec4i> hierarchy”,
Vec4i的定义: typedef Vec<int, 4> Vec4i;定义了一个“向量内每一个元素包含了4个int型变量”的向量。 hierarchy向量内每一个元素的4个int型变量——hierarchy[i][0] ~hierarchy[i][3],分别表示第 i个轮廓的后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号。如果当前轮廓没有对应的后一个 轮廓、前一个轮廓、父轮廓或内嵌轮廓的话,则hierarchy[i][0] ~hierarchy[i][3]的相应位被设置为
默认值-1。
mode 查找轮廓的模式
RETR_EXTERNAL=0,表示只检测外围轮廓 external [ɪkˈstɜːnl] 外观;外表
RETR_LIST=1,检测的轮廓不建立等级关系,即检测所有轮廓,较为常用
RETR_CCOMP=2,每层最多两级,从小到大,从里到外.
RETR_TREE = 3,按照树型存储轮廓,从大到小,从右到左.
method 轮廓近似方法也叫ApproximationMode approximation英 [əˌprɒksɪˈmeɪʃən]
大致说法;粗略描述;大致相似的东西;近似物;估算;粗略估计 ;近似值;逼近;逼近
chain英 [tʃeɪn] 链;链条
CHAIN APPROX_NONE保存所有轮廓上的点
CHAIN APPROX_SIMPLE,只保存角点,比如四边形,只保留四边形的4个角,存储信息少,比较常
用
返回contours和hierachy 即轮廓和层级
void myCV::contourstest()
{Mat dst,src1 , src = imread("lunkuo.jpg");cvtColor(src, src1, CV_BGR2GRAY);//Mat = imread("06.png", IMREAD_GRAYSCALE);threshold(src1, dst, 125, 255, THRESH_BINARY);vector<vector<Point>> contours;findContours(dst, contours, RETR_TREE, CHAIN_APPROX_SIMPLE);drawContours(src, contours, -1, Scalar(0, 0, 255), 1);imshow("src", src);
}