图像轮廓

转载自:https://www.cnblogs.com/REN-Murphy/p/15305827.html

 

图像轮廓
轮廓可以说是一个很好的图像目标的外部特征,这种特征对于我们进行图像分析,目标识别和理解等更深层次的处理都有很重要的意义
换句话说,边缘检测能够测出边缘,但是边缘是不连续的。将边缘连接为一个整体,构成轮廓

需要注意的问题
1> 通常是针对二值图像的轮廓提取,需要预先进行阈值分割或者边缘检测处理
2> 查找轮廓需要更改原始图像,因此,通常使用原始图像的一份拷贝操作
3> 在opencv中,寻找轮廓是针对白色物体的,一定要保证物体是白色,而背景必须是黑色

cv2.findContours()查找图像轮廓函数
contours,hierarchy = cv2.findContours(image,mode,method)
1> contours:轮廓;hierarchy:图像的拓扑信息(轮廓层次)
2> image:原始图像;mode:轮廓检索模式;method:轮廓的近似方法

cv2.drawContours()将查找到图像轮廓绘制到图像上
r = cv2.drawContours(o,contours,contourldx,color[,thickness])
1> r:目标图像,直接修改目标的像素点,实现绘制
2> o:原始图像;contours:需要绘制的边缘数组;contourldx:需要绘制的边缘索引(如果全部绘制则为-1);color:绘制的颜色;thickness:绘制轮廓时所用的画笔粗细(可选)

import cv2

img = cv2.imread(r"image\contours.bmp",cv2.IMREAD_COLOR)
# 彩色图像转灰度图
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 灰度图转换为二值图,cv2.THRESH_BINARY(二进制阈值化)
ret,binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

# cv2.findContours()查找图像轮廓函数
contours,hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

# 拷贝原始图像,因为查找轮廓需要更改原始图像
copy_img = img.copy()
copy_img2 = img.copy()

# cv2.drawContours()将查找到图像轮廓绘制到图像上
# 绘制第一个图像的轮廓
result1 = cv2.drawContours(copy_img,contours,0,(0,255,0),6)
# 绘制所有图像的轮廓
result2 = cv2.drawContours(copy_img2,contours,-1,(0,255,0),6)

cv2.imshow("original",img)
cv2.imshow("result1",result1)
cv2.imshow("result2",result2)

cv2.waitKey(0)
cv2.destroyAllWindows()

提取图像的轮廓,实验结果:

 

posted @ 2022-05-05 15:24  IllidanStormrage  阅读(100)  评论(0编辑  收藏  举报