实验原理
在计算机视觉中,颜色识别是一项基础而重要的任务。通过颜色识别,我们可以从图像中提取出特定颜色的区域,进而对这些区域进行分析、处理或标记。本实验利用OpenCV库,通过转换颜色空间、设定颜色范围、滤波、形态学变换以及寻找轮廓等步骤,实现了对图像中特定颜色(本例为黄色)的识别,并在识别到的区域上绘制轮廓。
-
颜色空间转换:首先,将图像从BGR颜色空间转换到HSV颜色空间。HSV颜色空间更符合人类对颜色的感知,且更容易进行颜色范围的划分。
-
颜色范围设定与筛选:在HSV颜色空间中,设定要识别的颜色的HSV范围,并利用
cv2.inRange
函数筛选出该颜色范围内的像素。 -
滤波与形态学变换:为了去除噪声和不必要的细节,对筛选出的颜色区域进行中值滤波。接着,进行形态学开运算(先腐蚀后膨胀),以进一步去除小物体、分离物体、平滑较大物体的边界。
-
寻找轮廓:利用
cv2.findContours
函数在滤波和形态学变换后的图像中寻找轮廓。 -
轮廓绘制:遍历所有找到的轮廓,根据轮廓的面积筛选出符合条件的轮廓,并在原图像的副本上绘制这些轮廓。
实验代码
import cv2
import numpy as np
# 1、输入图片
img = cv2.imread("./color_1.png")
img = cv2.resize(img, (0, 0), fx=0.7, fy=0.7)
# 2、转换HSV颜色空间
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 3、设定要识别的颜色范围,并利用inRange找到该