7.OpenCV-图像轮廓

这篇具有很好参考价值的文章主要介绍了7.OpenCV-图像轮廓。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.通过OpenCV的findContours可以很方便的找到图片中内容的轮廓。

2.为了提取轮廓有更高的准确率,在提取轮廓前,需要对图片进行预处理(二值+阈值),只保留感兴趣的图像。

3.通过计算轮廓面积与外接矩形或外接圆的面积,可以找到轮廓特征,进一步筛选出感兴趣的轮廓。

语法:cv2.findContours(img,mode,method)
mode:轮廓检索模式
RETR_EXTERNAL:只检最外面的轮廊
RETR_LIST:检索所有的轮廊,并将其保存到一条链表当中
RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部份的外部边界,第二层是空洞的边界
RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次(常用这个)
method:轮廓逼近方法
CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)。
CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部,也就是,函数只保留他们的终点部分。
为了更高的准确率,使用二值图像

示例代码 

import cv2
import math
import numpy as np

#图像轮廓
#语法:cv2.findContours(img,mode,method)
# mode:轮廓检索模式
#RETR_EXTERNAL:只检最外面的轮廊
#RETR_LIST:检索所有的轮廊,并将其保存到一条链表当中
#RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部份的外部边界,第二层是空洞的边界
#RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次
# method:轮廓逼近方法
#CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)。
#CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部,也就是,函数只保留他们的终点部分。
#为了更高的准确率,使用二值图像

def cv_show(name, img):
    cv2.imshow(name, img)  # 显示图像
    cv2.waitKey(0)         # 等待时间,单位毫秒,0表示任意键终止
    cv2.destroyAllWindows()

#1.读取图像
image = cv2.imread("C:\\Users\\zhangqs\\Desktop\\cv.png")

#2.预处理
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)                 #灰度图
ret,threshold=cv2.threshold(gray,160,255,cv2.THRESH_BINARY) #阈值处理

#3.查找轮廓
contours,hierarchy=cv2.findContours(threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

print('共找到',len(contours),'个轮廓')
#4.绘制轮廓

#在原图上绘制轮廓
draw2=image.copy() #注意:需要copy一下,否则将会改动原图
drawed2=cv2.drawContours(draw2,contours,-1,(0,0,255),2)  #图像,轮廓,轮廓索引,颜色模式,线条厚度
cv_show('draw_contours',draw2)

#在灰度图上绘制轮廓(下面的np.hstack函数要求数组维度一致,才能比较显示)
draw=gray.copy() #注意:需要copy一下,否则将会改动原图
drawed=cv2.drawContours(draw,contours,-1,(0,0,255),2)  #图像,轮廓,轮廓索引,颜色模式,线条厚度

#5.轮廓近似

#外接矩形(绿色线)
cnt=contours[12]
# epsilon=0.1*cv2.arcLength(cnt,True)
# approx=cv2.approxPolyDP(cnt,epsilon,True)
x,y,w,h=cv2.boundingRect(cnt)
imgRectangle=cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
cv_show('Rectangle',imgRectangle)

area=cv2.contourArea(cnt) #轮廓面积
rectArea=w*h #外接矩形面积
rate=float(area)/rectArea
print('轮廓面积/外接矩形面积比:',rate)

#外接圆(蓝色线)
cnt2=contours[11] 
(x,y),radius=cv2.minEnclosingCircle(cnt2)
center=(int(x),int(y))
radius=int(radius)
imgCircle=cv2.circle(image,center,radius,(255,0,0),2)
cv_show('Circle',imgCircle)
areaCircle=cv2.contourArea(cnt) #轮廓面积
rectArea=math.pi*radius*radius #外接圆面积
rateCircle=float(areaCircle)/areaCircle
print('轮廓面积/外接圆面积比:',rateCircle)


# #合并显示
# res=np.hstack((gray,threshold,drawed)) #注意:两层括号
# cv2.imshow('all',res)
# cv2.waitKey(0)
# cv2.destroyAllWindows()


运行结果

7.OpenCV-图像轮廓

 原图 

7.OpenCV-图像轮廓

轮廓图 

7.OpenCV-图像轮廓

外接矩形(绿色线条) 

7.OpenCV-图像轮廓

 外接圆(蓝色线条)

7.OpenCV-图像轮廓

 遍历轮廓,通过计算面积比,就可以找到轮廓特征,也就筛选出我们感兴趣的轮廓了。文章来源地址https://www.toymoban.com/news/detail-491839.html

到了这里,关于7.OpenCV-图像轮廓的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv通过轮廓点生成闭合图像

    有时候需要将某一些点生成闭合的二值图像。记录一下。

    2024年01月17日
    浏览(31)
  • 【Python】【OpenCV】关于cv2.findContours()轮廓索引(编号)解析(RETR_TREE)

    在打算自己实现二维码的定位的时候,看到了相关博文的关于cv2.findContours返回的层级信息来定位三个“回”字从而达到定位二维码的目的,但是返回的hierarchy中的层级信息分别对应的是哪个轮廓却困扰了许久,查阅了很多资料最后还是自己手动找出了清晰的规律。 关于hier

    2024年02月04日
    浏览(34)
  • 【OpenCV常用函数:轮廓检测+外接矩形检测】cv2.findContours()+cv2.boundingRect()

    对具有黑色背景的二值图像寻找白色区域的轮廓,因此一般都会先经过cvtColor()灰度化和threshold()二值化后的图像作为输入。 例如,如下的轮廓检测出的结果contours和hierarchy。 根据轮廓点检测对应轮廓的外接矩形

    2024年02月13日
    浏览(53)
  • c# opencv 找到图像的轮廓,并绘制轮廓

    原图                                                                                结果图                                                                  本意是想去除白色图像周边的几个白色小点,得到轮廓图后,其他都设置为黑色,结果是白点更明

    2024年02月13日
    浏览(87)
  • OpenCV 图像轮廓检测

            本文是OpenCV图像视觉入门之路的第15篇文章,本文详细的介绍了图像轮廓检测的各种操作,例如:轮廓检索模式、轮廓逼近算子等操作。         图像轮廓是具有相同颜色或灰度的连续点的曲线,轮廓在形状分析和物体的检测和识别中很有用。图像轮廓的作用

    2024年01月25日
    浏览(49)
  • OpenCv之图像轮廓

    目录 一、图像轮廓定义 二、绘制轮廓 三、计算轮廓面积与周长 图像轮廓是具有相同颜色或灰度的连续带你的曲线.轮廓在形状分析和物体的检测和识别中很有用 轮廓的作用: 用于图形分析 物体的识别与检测 注意点: 为了检测的准确性,需要先对图像进行二值化或Canny操作 画

    2024年02月17日
    浏览(43)
  • 7.OpenCV-图像轮廓

    1.通过OpenCV的findContours可以很方便的找到图片中内容的轮廓。 2.为了提取轮廓有更高的准确率,在提取轮廓前,需要对图片进行预处理(二值+阈值),只保留感兴趣的图像。 3.通过计算轮廓面积与外接矩形或外接圆的面积,可以找到轮廓特征,进一步筛选出感兴趣的轮廓。

    2024年02月09日
    浏览(60)
  • OpenCV 10(图像轮廓)

    图像轮廓是具有相同颜色或灰度的连续点的曲线. 轮廓在形状分析和物体的检测和识别中很有用。 轮廓的作用: - 用于图形分析 - 物体的识别和检测 注意点: - 为了检测的准确性,需要先对图像进行** 二值化**或**Canny操作 **。 - 画轮廓时会修改输入的图像, 如果之后想继续使用

    2024年02月09日
    浏览(49)
  • opencv图像轮廓检测

    效果展示: 代码部分:

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包