opencv颜色识别_[经验漫谈]Python使用OpenCV做颜色识别

在处理图像识别任务时,RGB颜色模式下判断颜色较为困难。通过转换为HSV颜色模式,我们可以更容易地区分不同颜色。文章以红绿灯识别为例,展示了如何使用Python的OpenCV库进行颜色检测。通过设定HSV颜色范围,可以过滤出图像中特定颜色的部分,为进一步的红绿灯识别奠定基础。虽然可能需要进一步调整颜色范围和应用形态学操作以提高准确性,但该方法提供了一个基本的颜色识别框架。
摘要由CSDN通过智能技术生成

    你可能会想要识别图片中的某种特定颜色,比如红绿灯的识别,当你以RGB方式读取一张图片之后,想要判定颜色是十分困难的,此时可以借助另一种颜色表示形式,HSV。

    正如RGB分别代表红绿蓝,HSV分别代表色相、饱和度和明度,其中如果想要区分不同颜色只需要借助色相(即第一个通道)即可,HSV可以具体表示为以下方式

025d69ccd947ac74c3da8e1e7777f484.png

(3ucky(3all / CC BY-SA (http://creativecommons.org/licenses/by-sa/3.0/)

https://commons.wikimedia.org/wiki/File:HSV_cone.png

    我使用一张红绿灯的相片,检测其中红黄绿三种不同颜色的分布

0a732593615f681d34bfbbc060263883.png

Shinxenius / CC BY-SA (https://creativecommons.org/licenses/by-sa/4.0)

https://commons.wikimedia.org/wiki/File:Semaforoencendido.jpg

    上代码

import cv2import numpy as npimage = cv2.imread("test.jpg", cv2.IMREAD_COLOR)image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)red_min1 = np.array([0, 15, 5])red_max1 = np.array([5, 255, 255])red_min2 = np.array([160, 15, 5])red_max2 = np.array([180, 255, 255])green_min = np.array([40, 15, 5])green_max = np.array([90, 255, 255])yellow_min = np.array([8, 15, 5])yellow_max = np.array([40, 255, 255])def detect_colour(image, colour_min, colour_max):    zone = cv2.inRange(image, colour_min, colour_max)    index = zone == 255    img = np.zeros_like(image)    img[:] = (255, 255, 255)    img[index] = image[index]    return imgresult = detect_colour(image, yellow_min, yellow_max)cv2.imwrite("result-yellow.jpg", result)result = detect_colour(image, red_min1, red_max1) + detect_colour(    image, red_min2, red_max2)cv2.imwrite("result-red.jpg", result)result = detect_colour(image, green_min, green_max)cv2.imwrite("result-green.jpg", result)

    我们先以RGB读取图片,之后第6行将图片转换成HSV形式,8-17行我指定了几种颜色的取值范围,但是此处的范围是我自行测试调整的,可能存在不准确的状况。我定义了一个函数detect_colour来检测某个范围的图片内容,由于红色存在两个区间,所以就将两个区间分别运行,结果相加。如此运行得到的三个结果如下。

8911149326acde25642741953a2863ea.png

48b4a83f2bc64785a4a6c225fdbe8700.png

4cf1d6bd6684769f418564387985d6c6.png

    从以上结果来看,大致可以过滤出不同颜色的部份,如果要做红绿灯识别的话,需要在上面三个结果的基础上进一步加工,要达到比较高准确度的话可能还要进行形态学转换,本文就不涉及了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像轮廓识别是一种常见的图像处理技术,可以用于物体检测、边缘检测、模式识别等领域。Python中的OpenCV库提供了丰富的图像处理功能,包括图像轮廓识别功能。下面介绍如何使用Python Opencv实现图像轮廓识别功能。 1. 导入库 首先需要导入OpenCV库。可以使用以下代码导入: ```python import cv2 import numpy as np ``` 2. 读取图像并转化为灰度图像 使用cv2.imread()函数读取图像,并使用cv2.cvtColor()函数将图像转化为灰度图像。代码如下: ```python img = cv2.imread("image.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ``` 3. 进行图像处理 在进行轮廓识别前,需要对图像进行一些处理,如图像平滑、二值化等。这里使用cv2.GaussianBlur()函数进行高斯平滑处理,并使用cv2.threshold()函数进行二值化处理。代码如下: ```python blur = cv2.GaussianBlur(gray, (5, 5), 0) ret, binary = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY) ``` 4. 进行轮廓识别 使用cv2.findContours()函数进行轮廓识别。该函数返回一个轮廓列表和一个层次结构。代码如下: ```python contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) ``` 5. 绘制轮廓 使用cv2.drawContours()函数绘制轮廓。代码如下: ```python cv2.drawContours(img, contours, -1, (0, 255, 0), 2) ``` 6. 显示图像 使用cv2.imshow()函数显示图像,并使用cv2.waitKey()函数等待按键。代码如下: ```python cv2.imshow("image", img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 完整代码如下: ```python import cv2 import numpy as np img = cv2.imread("image.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (5, 5), 0) ret, binary = cv2.threshold(blur, 127, 255, cv2.THRESH_BINARY) contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img, contours, -1, (0, 255, 0), 2) cv2.imshow("image", img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 运行代码后,将显示原图像和识别出的轮廓。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值