OpenCV半小时掌握基本操作之图像轮廓_第1页
OpenCV半小时掌握基本操作之图像轮廓_第2页
OpenCV半小时掌握基本操作之图像轮廓_第3页
OpenCV半小时掌握基本操作之图像轮廓_第4页
OpenCV半小时掌握基本操作之图像轮廓_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第OpenCV半小时掌握基本操作之图像轮廓目录概述图像轮廓绘制轮廓轮廓特征轮廓近似边界矩形外接圆【OpenCV】高手勿入!半小时学会基本操作图像轮廓

概述

OpenCV是一个跨平台的计算机视觉库,支持多语言,功能强大.今天小白就带大家一起携手走进OpenCV的世界.

图像轮廓

cv2.findContours可以帮助我们查找轮廓.

格式:

cv2.findContours(image,mode,method,contours=None,hierarchy=None,offset=None)

参数:

image:需要查找轮廓的图片

mode:模式

RETR_EXTERNAL:只检测最外面的轮廓

RETR_LIST:检测所有的轮廓,并将其保存到一条链表中

RETR_CCOMP:检索所有的轮廓,将他们组织为两层:顶部是各分部法外部边界,第二层是空洞的边界

RRTR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次

method:轮廓逼近的方法

CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(定点的序列)

CHAIN_APPROX_SIMPLE:压缩水平的,垂直的和斜的部分,只保留他们的终点部分

返回值:

contours:轮廓本身

hierarchy:轮廓的对应编号

原图:

绘制轮廓

cv2.drawContours可以实现轮廓绘制.

格式:

cv2.drawContours(image,contours,contourIdx,color,thickness=None,lineType=None,hierarchy=None,maxLevel=None,offset=None):

参数:

image:需要绘制轮廓的图片

contours:轮廓

color:颜色

thickness:轮廓粗细

绘制所有轮廓:

#读取图片

img=cv2.imread("contours.jpg")

#转换成灰度图

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#二值化

ret,thresh=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

#获取轮廓(所有)

contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

#绘制轮廓

draw_img=img.copy()

res=cv2.drawContours(draw_img,contours,-1,(0,0,255),2)

#图片展示

cv2.imshow("res",res)

cv2.waitKey(0)

cv2.destroyAllWindows()

输出结果:

绘制单个轮廓:

#读取图片

img=cv2.imread("contours.jpg")

#转换成灰度图

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#二值化

ret,thresh=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

#获取轮廓

contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

#绘制轮廓(单一)

draw_img=img.copy()

res=cv2.drawContours(draw_img,contours,0,(0,0,255),2)

#图片展示

cv2.imshow("res",res)

cv2.waitKey(0)

cv2.destroyAllWindows()

输出结果:

轮廓特征

#获取轮廓

cnt=contours[0]#取第一个轮廓

area=cv2.contourArea(cnt)

print("轮廓面积:",area)

#周长,True表示合并

perimeter=cv2.arcLength(cnt,True)

print("轮廓周长:",perimeter)

输出结果:

轮廓面积:8500.5

轮廓周长:437.9482651948929

轮廓近似

原图:

代码:

#读取图片

img=cv2.imread("contours2.jpg")

#转换成灰度图

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#二值化

ret,thresh=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

#获取轮廓

contours,hieratchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

#绘制轮廓

draw_img=img.copy()

res=cv2.drawContours(draw_img,contours,0,(0,0,255),2)

#图片展示

cv2.imshow("res",res)

cv2.waitKey(0)

cv2.destroyAllWindows()

#取外围轮廓

cnt=contours[0]

#轮廓近似

epsilon=0.1*cv2.arcLength(cnt,True)

approx=cv2.approxPolyDP(cnt,epsilon,True)

#绘制轮廓

draw_img=img.copy()

res=cv2.drawContours(draw_img,[approx],-1,(0,0,255),2)

#图片展示

cv2.imshow("res",res)

cv2.waitKey(0)

cv2.destroyAllWindows()

输出结果:

直接绘制轮廓:

轮廓近似:

边界矩形

cv2.boundingRect可以帮助我们得到边界矩形的位置和长宽.

例子:

#读取图片

img=cv2.imread("contours.jpg")

#转换成灰度图

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#二值化

ret,thresh=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

#获取轮廓

contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

#获取第一个轮廓

cnt=contours[0]

#获取正方形坐标长宽

x,y,w,h=cv2.boundingRect(cnt)

#图片展示

img=cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

cv2.imshow("img",img)

cv2.waitKey(0)

cv2.destroyAllWindows()

#轮廓面积

area=cv2.contourArea(cnt)

#边界矩形面积

rect_area=w*h

extent=area/rect_area

print('轮廓面积与边界矩形比:',extent)

输出结果:

轮廓面积与边界矩形比:0.5154317244724715

外接圆

cv2.minEnclosingCircle可以帮助我们得到外接圆的位置和半径.

例子:

#读取图片

img=cv2.imread("contours.jpg")

#转换成灰度图

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#二值化

ret,thresh=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

#获取轮廓

contours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

#获取第一个轮廓

cnt=contours[0]

#获取

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论