1、轮廓的基本概念:
构成图形或物体的外缘的线条。
2、轮廓检测:
轮廓检测指在包含目标和背景的数字图像中,忽略背景和目标内部的纹理以及噪声干扰的影响,采用一定的技术和方法来实现目标轮廓提取的过程。它是目标检测、形状分析、目标识别和目标跟踪等技术的重要基础。
3、图像中的信号:
图像中的低频信号和高频信号也叫做低频分量和高频分量。 简单一点说,图像中的高频分量,指的是图像强度(亮度/灰度)变化剧烈的地方,也就是我们常说的边缘(轮廓);图像中的低频分量,指的是图像强度(亮度/灰度)变换平缓的地方,也就是大片色块的地方。 人眼对图像中的高频信号更为敏感,举个例子,在一张白纸上有一行字,那么我们肯定直接聚焦在文字上,而不会太在意白纸本身,这里文字就是高频信号,而白纸就是低频信号。
4、边缘和轮廓的区别:
边缘检测是检测图像的边缘 也就是图像差异比较大的地方
轮廓提取是提取出你想要得到的轮廓 轮廓可能是边缘的一部分
5、边缘和边界的区别:
在图像合成中单一物体的轮廓叫做边缘,画布的大小叫边界.
1、轮廓检测通常过程:
求取图像(灰度或彩色)中物体轮廓的过程主要有四个步骤。
2、轮廓检测的分类(了解)
静态图像轮廓检测编
早期轮廓检测的方法通过局部的测量计算来量化一个给定图像位置的边界是否存在。Roberts算子,Sobel算子和Prewitt算子通过灰度图像和局部导数滤波器卷积进行边缘检测。Mary和Hildreth使用拉普拉斯算子的零交叉高斯算子。丰富的特征描述子可以通过对不同尺度的图像和多方向的滤波器的响应获得。
视频轮廓检测:
一般过程:
灰度模式 – 高斯平滑 – 边缘检测 – 二值化 – 轮廓检测
1、图像轮廓的查找:
dst,countours, hierarchy = cv2.findContours(image, mode, method, contours=None, hierarchy=None, offset=None)
mode | 详解 |
---|---|
cv2.RETR_EXTERNAL | 只检测外轮廓 |
cv2.RETR_LIST | 检测的轮廓不建立等级关系 |
cv2.RETR_CCOMP | 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息 |
cv2.RETR_TREE | 建立一个等级树结构的轮廓 |
method | 描述 |
---|---|
cv2.CHAIN_APPROX_NONE | 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2), abs(y2-y1))<=1。 |
cv2.CHAIN_APPROX_SIMPLE | 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个 矩形轮廓只需4个点来保存轮廓信息 |
cv2.CHAIN_APPROX_TC89_L1 和 cv2.CHAIN_APPROX_TC89_KCOS | 使用teh-Chinl chain 近似算法 |
import cv2
img = cv2.imread("first.jpg",0) #以灰度图像读取图像
GauImg = cv2.GaussianBlur(img,(3,3),1) #高斯模糊
Canny_GauImg = cv2.Canny(GauImg,100,200) #边缘检测
thresh,thdDst= cv2.threshold(Canny_GauImg,172,255,cv2.THRESH_BINARY) #二值化图像
binary , contours , hierarchu = cv2.findContours(thdDst,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow("img",img)
cv2.imshow("binart",binary)
cv2.waitKey()
cv2.destroyAllWindows()
2、轮廓绘制:
cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None)
import cv2
BGRimg = cv2.imread("first.jpg") #以灰度图像读取图像
GRAYimg = cv2.cvtColor(BGRimg,cv2.COLOR_BGR2GRAY) #颜色空间转化
GauImg = cv2.GaussianBlur(GRAYimg,(3,3),1) #高斯模糊
Canny_GauImg = cv2.Canny(GauImg,100,200) #边缘检测
thresh,thdDst= cv2.threshold(Canny_GauImg,172,255,cv2.THRESH_BINARY) #二值化
binary , contours , hierarchu = cv2.findContours(thdDst,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) #检测轮廓
contoursImg = cv2.drawContours(BGRimg,contours,-1,(255,0,0)) #绘制轮廓
cv2.imshow("img",BGRimg)
cv2.imshow("binart",binary)
cv2.imshow("contours",contoursImg)
cv2.waitKey()
cv2.destroyAllWindows()
3、轮廓的特征:
练习题 9:
描绘出喜欢人物头部的轮廓,并绘制在原图上。
评论出你的答案