Opencv识别图片颜色并绘制轮廓

实验原理

在计算机视觉中,颜色识别是一项基础而重要的任务。通过颜色识别,我们可以从图像中提取出特定颜色的区域,进而对这些区域进行分析、处理或标记。本实验利用OpenCV库,通过转换颜色空间、设定颜色范围、滤波、形态学变换以及寻找轮廓等步骤,实现了对图像中特定颜色(本例为黄色)的识别,并在识别到的区域上绘制轮廓。

  1. 颜色空间转换:首先,将图像从BGR颜色空间转换到HSV颜色空间。HSV颜色空间更符合人类对颜色的感知,且更容易进行颜色范围的划分。

  2. 颜色范围设定与筛选:在HSV颜色空间中,设定要识别的颜色的HSV范围,并利用cv2.inRange函数筛选出该颜色范围内的像素。

  3. 滤波与形态学变换:为了去除噪声和不必要的细节,对筛选出的颜色区域进行中值滤波。接着,进行形态学开运算(先腐蚀后膨胀),以进一步去除小物体、分离物体、平滑较大物体的边界。

  4. 寻找轮廓:利用cv2.findContours函数在滤波和形态学变换后的图像中寻找轮廓。

  5. 轮廓绘制:遍历所有找到的轮廓,根据轮廓的面积筛选出符合条件的轮廓,并在原图像的副本上绘制这些轮廓。

实验代码
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找到该
OpenCV是一个强大的计算机视觉库,可以用于图像处理和分析。如果你想在OpenCV识别图片中的颜色方块将其框出来,你可以按照以下几个步骤操作: 1. **读取图片**:首先,使用`cv2.imread()`函数从文件或摄像头获取图像。 ```python import cv2 image = cv2.imread('image.jpg') ``` 2. **转换为HSV空间**:因为颜色检测通常在HSV(色度、饱和度、值)色彩空间效果更好,所以将BGR图像转为HSV。 ```python hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) ``` 3. **设定颜色范围**:确定你想找的颜色的HSV范围。例如,如果你想要识别红色,可以设置一个红光区。 ```python lower_red = (0, 50, 50) upper_red = (10, 255, 255) # 这里只是示例,实际颜色阈值需要根据目标颜色调整 ``` 4. **创建掩码**:通过`inRange()`函数创建一个只包含指定颜色的二进制掩码。 ```python mask = cv2.inRange(hsv_image, lower_red, upper_red) ``` 5. **腐蚀膨胀操作**:有时为了得到更清晰的边缘,可以对掩码进行腐蚀和膨胀操作。 ```python kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 可调整结构元素大小 mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) ``` 6. **查找轮廓**:使用`cv2.findContours()`找到颜色方块的轮廓。 ```python contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ``` 7. **绘制边界框**:对于每个轮廓,使用`cv2.drawContours()`画出矩形框。 ```python for contour in contours: x, y, w, h = cv2.boundingRect(contour) cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2) # 绿色边框,可自定义颜色 ``` 8. **显示结果**:最后显示带有边框的原始图像。 ```python cv2.imshow('Detected Colors', image) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值