OpenCV自学笔记12. 识别图像中的红色圆形

识别图像中的红色圆形

本小节用到的图像为:

OpenCV自学笔记12. 识别图像中的红色圆形_第1张图片

思路:

解决这个问题的思路如下:

Step1. 首先,将图片由 RGB 颜色空间转换为 HSV 颜色空间,HSV颜色空间可以更直观地反映物体的颜色,便于利用颜色进行分割。有关HSV的相关内容,见以下文章:
http://blog.csdn.net/viewcode/article/details/8203728
http://blog.csdn.net/qq61394323/article/details/11226885

Step2. 根据红色在HSV颜色空间中的范围,对图像进行分割。属于红色的像素被保留下来(变为白色),其余像素置为黑色。

Step3. 形态学运算,对刚才得到的图像进行膨胀,以使红色区域更明显

Step4. 利用Hough变换,提取图像中的圆形

Step5. 绘制圆形

上述思路的代码如下:

import cv2
import numpy as np

# Step1. 转换为HSV
img = cv2.imread('images/00.jpg')
hue_image = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# Step2. 用颜色分割图像
low_range = np.array([0, 123, 100])
high_range = np.array([5, 255, 255])
th = cv2.inRange(hue_image, low_range, high_range)

# Step3. 形态学运算,膨胀
dilated = cv2.dilate(th, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)), iterations=2)

# Step4. Hough Circle
circles = cv2.HoughCircles(dilated, cv2.HOUGH_GRADIENT, 1, 100, param1=15, param2=7, minRadius=10, maxRadius=20)

# Step5. 绘制
if circles is not None:
    x, y, radius = circles[0][0]
    center = (x, y)
    cv2.circle(img, center, radius, (0, 255, 0), 2)
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

对上述函数做几点说明:
1、cv2.cvtColor(img, cv2.COLOR_BGR2HSV):将图像由RGB颜色空间转换到HSV颜色空间(H-色调、S-饱和度、V-亮度)。与RGB相比,HSV更为关注色彩,而不是亮度。因此可以用于提取固定颜色的物体,比如这里的红色小球。

  1. cv2.inRange(hue_img, low_range, high_range):low_range 和 high_range决定了色彩的范围。

  2. dilated = cv2.dilate(th, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)), iterations=2):对图像进行膨胀操作,
    函数getStructuringElement,可以获取常用的结构元素的形状:矩形(包括线形)、椭圆(包括圆形)及十字形。MORPH_RECT, MORPH_ELLIPSE, MORPH_CROSS
    iterations,迭代的次数

  3. cv2.HoughCircles(dilated, cv2.HOUGH_GRADIENT, 1, 100, param1=15, param2=7, minRadius=10, maxRadius=20)

程序的运行结果为:

可以看出,程序准确地识别出了圆形~

OpenCV自学笔记12. 识别图像中的红色圆形_第2张图片

今天就到这里, 拜~

OpenCV自学笔记12. 识别图像中的红色圆形_第3张图片

你可能感兴趣的:(OpenCV,OpenCV学习笔记)