博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python-OpenCV学习(八)凸轮廓检测
阅读量:5935 次
发布时间:2019-06-19

本文共 1255 字,大约阅读时间需要 4 分钟。

凸轮廓与Douglas-Peucker算法:

大多数处理轮廓的时候,物体的形状(包括凸形状)都是变换多样的。凸形状内部的任意两点的连线都在该形状里面。
cv.approxPloyDP是一个计算进似多边形框的函数,该函数有三个参数:

  • 第一个参数为“轮廓”
  • 第二个参数为$\varepsilon $值,它表示圆轮廓与近似多边形的最大差值(这个值越小,近似多边形与源轮廓越接近)
  • 第三个参数为“布尔标记”表示这个多边形是否闭和合
    $\varepsilon$是为所得到的近似多边形周长与轮廓之间的最大差值,差值越小,多边形轮廓越相似。

如果需要轮廓的周长信息可以通过Opencv的cv2.arcLength函数来完成:

epsilon=0.01*cv2.arcLength(cnt,True)approx=cv2.approxPolyDP(cnt,epsilon,True)

通过OpenCV来有效计算一个近似多变形,多边形周长与源轮廓周长之比就为$\varepsilon$

为了计算图形状,需要用OpenCV的cv2.convexHull函数来获取处理过的轮廓信息,

hull =cv2.convexHull(cnt)

完整代码:

import cv2import numpy as npimg = cv2.pyrDown(cv2.imread("hammer.jpg", cv2.IMREAD_UNCHANGED))ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY) , 127, 255, cv2.THRESH_BINARY)black = cv2.cvtColor(np.zeros((img.shape[1], img.shape[0]), dtype=np.uint8), cv2.COLOR_GRAY2BGR)image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)for cnt in contours:  epsilon = 0.01 * cv2.arcLength(cnt,True)  approx = cv2.approxPolyDP(cnt,epsilon,True)  hull = cv2.convexHull(cnt)  cv2.drawContours(black, [cnt], -1, (0, 255, 0), 2)  cv2.drawContours(black, [approx], -1, (255, 255, 0), 2)  cv2.drawContours(black, [hull], -1, (0, 0, 255), 2)cv2.imshow("hull", black)cv2.waitKey()cv2.destroyAllWindows()

1

转载地址:http://rhjtx.baihongyu.com/

你可能感兴趣的文章
Puppet module命令参数介绍(六)
查看>>
VB中CHR()码值对应表
查看>>
LAMP基于不同主机和fcgi的通信方式
查看>>
2013美赛建模算法关键词
查看>>
Android-Parcelable理解与使用(对象序列化)
查看>>
数据结构----图(邻接表用法)
查看>>
批量扫描雏形之在Java中调用nmap进行主机探测
查看>>
php 二维数组按照value分组
查看>>
[Linux] 文件系统
查看>>
windows 7 防火墙无法开启!错误代码5 错误代码0x6D9 解决办法
查看>>
winhex脚本
查看>>
我的友情链接
查看>>
SVN命令详解
查看>>
Windows的资源监视器
查看>>
Android图形解锁的绘制
查看>>
UML基础系列:类图
查看>>
学习日志---树回归(回归树,模型树)
查看>>
Gene6_FTP_Server_高级配置
查看>>
centos 7编译安装nginx
查看>>
我的友情链接
查看>>