在另一位用户的帖子中,他们讨论了如何使用OpenCV的Hough Circle Transform来检测和绘制公牛目标here上的每个环。建议的解决方案是使用轮廓来定位每个圆。当我尝试同样的事情时,我的结果正是我所寻找的;唯一的问题是,我试图创建的程序需要一系列圆圈,每个环上有一个圆圈,这样我就可以计算距离中心的距离,从而计算出给定点存在的特定环。
如果上述帖子的代码,我有以下内容:
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,_
的含义。它是某种阵列吗?如何访问各个轮廓?当我尝试打印变量时,它给了我接近4,000行。当然,我不会在这里发布它们,但它们似乎是一组坐标。
所以我的问题是:如何将这组轮廓转换为更易于管理的圈子?