图像凸性检测函数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 条评论
登录 后参与评论

相关文章

来自专栏贾志刚-OpenCV学堂

OpenCV中原始图像加载与保存压缩技巧

OpenCV中关于图像读写有两个函数imread与imwrite,imread加载的时候支持灰度图像、彩色图像、原始图像加载,默认情况下通过imread加载的图...

301
来自专栏cloudskyme

使用R画地图数据

用R画地图数据 首先,从这里下载中国地图的GIS数据,这是一个压缩包,完全解压后包含三个文件(bou2_4p.dbf、bou2_4p.shp和bou2_4p.s...

3937
来自专栏人工智能

Google宣布TensorFlow Lite 可支持 Core ML!

文 /TensorFlow 团队 11 月 14 日,我们宣布了 TensorFlow Lite 的开发者预览版,TensorFlow Lite 是 Tenso...

1997
来自专栏Python小屋

Python实现批量图片添加数字水印

之前写过一个类似的代码,是把水印信息打散以后随机添加到原图中,并提供了水印信息的提取功能,请参考:Python实现图像空域随机水印加入与提取。本文代码功能:为指...

3063
来自专栏HansBug's Lab

再看最短路算法 1 —— 单源最短路

学了多年的算法,最短路问题相当之常见———— 好久没写过最短路的问题了,直到昨天闲的无聊来了一题——BZOJ3402(HansBug:额才发现我弱到只能刷水的地...

3306
来自专栏用户2442861的专栏

Python-OpenCV 处理图像(一):基本操作

第一种方式使用cv2.cv的LoadImage、ShowImage和SaveImage函数

892
来自专栏AI研习社

谷歌与苹果达成合作:TensorFlow Lite 将支持 Core ML | 快讯

11 月 14 日,谷歌正式发布 TensorFlow Lite 开发者预览版,这是针对移动和嵌入式设备的轻量级解决方案。在介绍中,谷歌表示,TensorFlo...

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

【前沿】为什么Python是金融产品开发的最佳选择?

How do you nd your way and stay a oat in ntech? This new technology took the w...

952
来自专栏逍遥剑客的游戏开发

溶解效果

1347
来自专栏小鹏的专栏

kinect v2.0原理介绍之十一:录制视频

不小心误删了,再加上。 ~~有兴趣的小伙伴,加kinect算法交流群:462964980。 录制视频是结合openCV来做的。  代码如下: // 19...

2039

扫码关注云+社区