图像凸性检测函数convexityDefects在Python2.7下使用opencv3.0的问题

最近在学习Python下的OpenCV,在图像的凸性检测中,发现opencv3.0下的convexityDefects函数对图像的凸性缺陷处理有错误。不知道是opencv3.0的版本问题还是我个人的错误代码。

例如使用的Python版本是2.7.6,使用的OpenCV版本是3.0,以下是图像凸性检测代码:

 import cv2
 import numpy as np
 
 img = cv2.imread('star2.png')
 img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
 ret,thresh = cv2.threshold(img_gray,127,255,0)
 img_c,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
 cnt = contours[0]
 
 hull = cv2.convexHull(cnt,returnPoints = False)
 defects = cv2.convexityDefects(cnt,hull)
 
 for i in range(defects.shape[0]):
 s,e,f,d = defects[i,0]
 start = tuple(cnt[s][0])
 end = tuple(cnt[e][0])
 far = tuple(cnt[f][0])
 print start,end,far,d
 cv2.line(img,start,end,[0,255,0],2)
 cv2.circle(img,far,5,[0,0,255],-1)
 
 
 cv2.imshow('img',img)
 cv2.waitKey(0)
 cv2.destroyAllWindows()

结果显示,某处缺陷最大值定位错误,如图:

而如果使用OpenCV2.4.13版本,以下是图像凸性检测代码:

 import cv2
 import numpy as np
 
 img = cv2.imread('star2.png')
 img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
 ret,thresh = cv2.threshold(img_gray,127,255,0)
 contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
 cnt = contours[0]
 
 hull = cv2.convexHull(cnt,returnPoints = False)
 defects = cv2.convexityDefects(cnt,hull)
 
 for i in range(defects.shape[0]):
 s,e,f,d = defects[i,0]
 start = tuple(cnt[s][0])
 end = tuple(cnt[e][0])
 far = tuple(cnt[f][0])
 print start,end,far,d
 cv2.line(img,start,end,[0,255,0],2)
 cv2.circle(img,far,5,[0,0,255],-1)
 
 
 cv2.imshow('img',img)
 cv2.waitKey(0)
 cv2.destroyAllWindows()

结果显示,图像的凸性检测是正确的,如图所示:

总结:

出现这样的问题是因为OpenCV3.0版本还不够稳定还是我的编程错误呢?不知道各位有没有遇到类似的问题,特此提出来,希望大家讨论一下!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量化投资与机器学习

一个高效的中文词法分析工具包

谢谢大家支持,可以让有兴趣的人关注这个公众号。让知识传播的更加富有活力,谢谢各位读者。 很多人问博主为什么每次的头像是奥黛丽赫本,因为她是博主女神,每天看看女...

2539
来自专栏Petrichor的专栏

opencv: 轮廓绘制 详细拆解(图示+源码)

524
来自专栏C++

Opencv4.0:遍历Mat图像空间、读取摄像头

1112
来自专栏Python数据科学

Python NLP快速入门教程

本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Pyth...

631
来自专栏Python中文社区

五分钟入门Python自然语言处理(一)

專 欄 ❈Jerry,Python中文社区专栏作者。 blog:https://my.oschina.net/jhao104/blog github:ht...

1977
来自专栏深度学习思考者

人脸识别 | 如何解析URL,并给出人脸检测结果

本文给出最简单的人脸检测测试代码,与常见的场景不同的是,需要从互联网抓取图像,并非本地上存在的图像。 所需依赖: OpenCV NumPy urllib...

17910
来自专栏CDA数据分析师

如果用R语言读《笑傲江湖》……

上周末,闲着没事就试了一个新的R中文文本分词包——jiebaR,支持Windows,支持简体及繁体中文,速度也很快,大家可以根据该包文档去学习,很容易上手!下面...

1986
来自专栏书山有路勤为径

编码蓝幕/证件照背景替换

此时你会发现背景可能是红色,不是预料的蓝色,这是因为OpenCv会把彩色图像读取成BGR(蓝绿红)图像

532
来自专栏小詹同学

Python系列之三——人脸检测、人脸识别

这是关于人脸的又一篇原创! 之前有利用C++和OpenCv写过人脸识别的系列文章,对于人脸识别的基本理解和步骤流程等基本知识不做反复叙述。比詹小白还要白的童鞋可...

4058
来自专栏人工智能LeadAI

OpenCV人脸识别之三:识别自己的脸

本系列人脸识别文章用的是opencv2,最新版的opencv3.2的代码请参考文章: OpenCV之识别自己的脸——C++源码放送(请在上一篇文章末尾查看) ...

4094

扫码关注云+社区