使用opencv检测图像中的圆要比检测具有尖锐边缘的其他形状困难得多。下面展示如何使用该cv2.HoughCircles函数通过opencv检测图像中的圆。
检测图像中的圆,你需要使用cv2.HoughCircles函数。但该函数使用起来并不是一件容易的事。
cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import cv2
def detectCircles():
# 加载图像
image = cv2.imread('./images/circle_2.png')
output = image.copy()
# 转换成灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 检测圆
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.2, 75)
# 确保至少找到一个圆
if circles is not None:
# 将圆(x, y)坐标和半径转换成int
circles = np.round(circles[0, :]).astype('int')
for (x, y, r) in circles:
# 绘制圆和半径矩形到output
cv2.circle(output, (x, y), r, (0, 255, 0), 4)
cv2.rectangle(output, (x-5, y-5), (x+5, y+5), (0, 128, 255), -1)
cv2.imshow('output', np.hstack([image, output]))
cv2.waitKey(0)
cv2.destroyAllWindows()
def main():
detectCircles()
if __name__ == "__main__":
main()
运行代码,结果如下:
该cv2.HoughCircles函数只能检测到七个圆,而不是八个圆。这是因为大外圆的中心(x,y)坐标与内圆相同,因此舍去了内圆。
在这篇文章中,展示了如何使用cv2.HoughCircles在python opencv中检测图像中的圆,与检测图像中的正方形和矩形不同,检测圆形实际上要困难得多。
源代码和素材
https://www.pyimagesearch.com