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

识别图像中的红色圆形

本小节用到的图像为:

这里写图片描述

思路:

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

Step1. 首先,将图片由 RGB 颜色空间转换为 HSV 颜色空间,HSV颜色空间可以更直观地反映物体的颜色,便于利用颜色进行分割。有关HSV的相关内容,见以下文章:
http://blog.youkuaiyun.com/viewcode/article/details/8203728
http://blog.youkuaiyun.com/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)

程序的运行结果为:

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

这里写图片描述

今天就到这里, 拜~

这里写图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值