Python+OpenCV识别图片中的圆形
本文讲解如何使用Python和OpenCV库对图片中的圆形进行识别和定位。
准备工作
在开始编写代码前,需要先安装Python和OpenCV库:
# 安装Python
sudo apt-get install python
# 安装OpenCV库
pip install opencv-python
加载图片
在OpenCV中,我们可以使用cv2.imread()
方法加载图片:
import cv2
img = cv2.imread("test.jpg")
预处理图片
在进行圆形识别前,我们需要对图片进行预处理,以便提高识别的准确率。预处理通常包括以下几个步骤:
- 灰度化
- 中值滤波
- 二值化
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 中值滤波
gray = cv2.medianBlur(gray, 5)
# 二值化
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
检测圆形
在进行圆形检测前,需要使用cv2.HoughCircles()
方法设置圆形检测参数:
# 设置圆形检测参数
circles = cv2.HoughCircles(binary, cv2.HOUGH_GRADIENT, 1.5, 100)
# 绘制圆形
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv2.circle(img, (x, y), r, (0, 255, 0), 2)
示例1
import cv2
import numpy as np
img = cv2.imread("test.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 5)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
circles = cv2.HoughCircles(binary, cv2.HOUGH_GRADIENT, 1.5, 100)
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv2.circle(img, (x, y), r, (0, 255, 0), 2)
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
示例2
import cv2
import numpy as np
img = cv2.imread("test2.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 5)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
circles = cv2.HoughCircles(binary, cv2.HOUGH_GRADIENT, 1.5, 100)
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv2.circle(img, (x, y), r, (0, 255, 0), 2)
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
上述示例代码中,test.jpg
和test2.png
是两张待识别的图片,可以根据实际需要进行更改。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python+opencv识别图片中的圆形 - Python技术站