ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

图像轮廓

2022-05-05 15:31:07  阅读:156  来源: 互联网

标签:img cv2 contours 图像 轮廓 绘制


转载自: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()

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

 

标签:img,cv2,contours,图像,轮廓,绘制
来源: https://www.cnblogs.com/IllidanStormrage/p/16224924.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有