专栏首页红色石头的机器学习之路图像凸性检测函数convexityDefects在Python2.7下使用opencv3.0的问题

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

相关文章

  • Jacobian矩阵和Hessian矩阵简析

    在向量分析中,雅可比(Jacobian)矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式成为雅可比行列式。

    红色石头
  • 为什么局部下降最快的方向就是梯度的负方向?

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    红色石头
  • 中国台湾大学林轩田机器学习基石课程学习笔记5 -- Training versus Testing

    上节课,我们主要介绍了机器学习的可行性。首先,由NFL定理可知,机器学习貌似是不可行的。但是,随后引入了统计学知识,如果样本数据足够大,且hypothesis个...

    红色石头
  • OpenCV学习笔记(Python)

    警告: 就算图像的路径是错的, OpenCV 也不会提醒你的,但是当你使用命 令print img时得到的结果是None。

    一点儿也不潇洒
  • 使用OpenCV调用摄像头,显示图片,获取视频并保存

    友情链接:https://blog.csdn.net/u012348774/article/details/78255130

    种花家的奋斗兔
  • [图像处理] Python+OpenCV实现车牌区域识别

    这里原理推荐我以前C++图像处理的文章,如下:https://blog.csdn.net/column/details/eastmount-mfc.html

    统计学家
  • Halcon缺陷检测实例转OpenCV实现(三)

    本期文章继续介绍缺陷检测专题的第三个案例,用OpenCV实现Halcon中一个物体凸缺陷检测的实例,前两个案例链接如上↑↑↑。

    Color Space
  • Python OpenCV4趣味应用系列(九)---划痕缺陷检测实例

    比如Canny边缘检测也可以,只是阈值难于调节。当然,实现方法不唯一,大家可以自己尝试一下。

    Color Space
  • 手势识别中一些错误解决方法

    最近在看一个手势识别的项目时,遇到了一些错误,主要原因是该项目是使用python2.7+opencv2.4.8,而我的环境是python3.5.2+opencv...

    py3study
  • OpenCV:目标跟踪。

    下面就通过计算视频帧之间的差异(即考虑背景帧和其他帧之间的差异),进而实现目标跟踪。

    AiTechYun

扫码关注云+社区

领取腾讯云代金券