识别红色区域(python+opencv)

版本:

Python:3.7

OpenCV: 4.5.5

步骤:

1、将图片转到HSV色彩空间;

2、设定H、S、V三值的范围;

        参考链接:OpenCV中HSV颜色模型及颜色分量范围 - wangyblzu - 博客园

        注:红色的H有俩个范围(0-10和156-180)

3、使用OpenCV中inRange()函数将输入的HSV图筛选出符合上述H、S、V的二值图像;

4、使用两个范围会得到两个二值图像(类似于互为补集的情况),将两个二值图像进行相加操作,会得到较完整的红色区域;

注:(1)H的取值范围按链接中推荐的即可;

(2)S的取值范围如按链接中推荐的范围会将肤色识别为红色,所以需要将下限值调高一些(例如下限值在100~180之间);

        (3)V的取值范围按链接中推荐的范围即可,因为当有东西遮在上面而处于阴影中时,低下限值的作用就很明显。

测试源码:

import cv2
import numpy as np


if __name__ == "__main__":
    img = cv2.imread('Picture12.jpg')
    # 在彩色图像的情况下,解码图像将以b g r顺序存储通道。
    grid_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

    # 从RGB色彩空间转换到HSV色彩空间
    grid_HSV = cv2.cvtColor(grid_RGB, cv2.COLOR_RGB2HSV)

    # H、S、V范围一:
    lower1 = np.array([0,43,46])
    upper1 = np.array([10,255,255])
    mask1 = cv2.inRange(grid_HSV, lower1, upper1)       # mask1 为二值图像
    res1 = cv2.bitwise_and(grid_RGB, grid_RGB, mask=mask1)

    # H、S、V范围二:
    lower2 = np.array([156,43,46])
    upper2 = np.array([180,255,255])
    mask2 = cv2.inRange(grid_HSV, lower2, upper2)
    res2 = cv2.bitwise_and(grid_RGB,grid_RGB, mask=mask2)

    # 将两个二值图像结果 相加
    mask3 = mask1 + mask2
    
    # 结果显示
    cv2.imshow("mask3", mask3)
    cv2.imshow("img",img)
    cv2.imshow("Mask1",mask1)
    cv2.imshow("res1",res1)
    cv2.imshow("Mask2",mask2)
    cv2.imshow("res2",res2)
    cv2.imshow("grid_RGB", grid_RGB[:,:,::-1])           # imshow()函数传入的变量也要为b g r通道顺序
    cv2.waitKey(0)
    cv2.destroyAllWindows()

测试图片:

结果图片:显示mask3

  • 16
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
OpenCV识别柱子,可以使用图像处理库中的颜色空间转换和阈值处理函数。首先,将彩色图像转换为RGB色彩空间。然后,使用HSV色彩空间将图像转换为HSV色彩空间。接下来,根据柱子的颜色范围,设置相应的阈值范围。一般来说,柱子的颜色在HSV色彩空间中的色调(H)通道上有较明显的差异。通过设定合适的色调范围,可以将柱子从图像中提取出来。 在Python中,可以使用以下代码来实现这个过程: ```python import cv2 import numpy as np if __name__ == "__main__": img = cv2.imread('Picture12.jpg') grid_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) grid_HSV = cv2.cvtColor(grid_RGB, cv2.COLOR_RGB2HSV) lower = np.array([H_min, S_min, V_min]) # 设置柱子颜色范围的下限值 upper = np.array([H_max, S_max, V_max]) # 设置柱子颜色范围的上限值 mask = cv2.inRange(grid_HSV, lower, upper) # 根据颜色范围创建掩膜 res = cv2.bitwise_and(grid_RGB, grid_RGB, mask=mask) # 通过掩膜提取柱子 cv2.imshow("Original Image", img) cv2.imshow("Mask", mask) cv2.imshow("Result", res) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在代码中,你需要根据你想要识别的柱子的具体颜色范围来设置`H_min`、`S_min`、`V_min`和`H_max`、`S_max`、`V_max`的值。通过调整这些值,可以得到最佳的柱子识别效果。 这样,你就可以使用OpenCVPython识别柱子了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [识别红色区域python+opencv)](https://blog.csdn.net/Kang14789/article/details/124049626)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [基于Python+OpenCV智能答题卡识别系统-深度学习和图像识别算法应用(含Python全部工程源码)+训练与测试数据...](https://download.csdn.net/download/qq_31136513/88280326)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值