2015-12-21 135 views
0

在另一个用户的帖子中,他们讨论了他们如何使用OpenCV的霍夫圆变换来检测和绘制一个公牛目标上的每个环。提出的解决方案是改为使用轮廓来定位每个圆。当我尝试同样的事情时,我的结果正是我所期待的;唯一的问题是,我试图创建的程序需要一系列的圆圈,每个圆环上有一个圆圈,以便我可以计算距离中心的距离,从而计算给定点存在的特定环。OpenCV中的轮廓阵列

继代码,如果提到的文章中,我有以下几点:

import cv2 
import numpy as np 

image = cv2.imread('bull.png') 
image_copy = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) 
grayscaled_image = cv2.cvtColor(image_copy, cv2.COLOR_GRAY2BGR) 

cv2.imshow("confirm", grayscaled_image) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

_,contours,_ = cv2.findContours(255 - image_copy, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) 
print(contours) 

cv2.drawContours(image, contours, -1, color=(0,255,0), thickness=1) 

cv2.imshow("detected circles", image) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

这给了我同样的结果,如图中的链接后。

这很好。我喜欢进步。不过,我最初尝试使用与链接的海报相同的方法,因为我喜欢圈子提供的坐标和半径信息。

我在OpenCV's tutorials之一发现,你可以包含一个圆形,矩形或椭圆的轮廓。这个教程很容易遵循个人的轮廓,但在我的代码中,我不知道_,contours,_的含义。它是某种阵列吗?我如何访问各个轮廓?当我尝试打印变量时,它给了我近4000行。当然,我不会在这里发布它们,但它们似乎是一组坐标。

所以我的问题是:我怎样才能将这种轮廓分组转换为更易于管理的圆?

回答

0

正如我在上一个问题中提到的,您可以在每个轮廓上使用minEnclosingCircle。你会得到圈子中心和半径。