zoukankan      html  css  js  c++  java
  • 在光照强度明暗不一的情况下,该采用RGB还是HSV通道来检测图片?

    如果光线不好,有阴影,斑驳,或者太亮的话简单的用颜色阈值就不太适用了,我们要如何完整的检测出处于不同光线下的物体? 图像表示方式还有HSV(H(色相)S(饱和度)V(明度)),HLS(H(色相)L(亮度)S(饱和度)) 在HSV中,V受光照的影响最大,而H基本不受阴影或过高亮度的影响,如果我们依靠这个通道,舍弃V通道的信息,那就能对彩色物体进行检测,而且效果会比在RGB颜色空间中更为可靠。

    import numpy as np
    import matplotlib.pyplot as plt
    import cv2
    %matplotlib inline
    image = cv2.imread('3.png')
    image_copy = np.copy(image)
    image_copy = cv2.cvtColor(image_copy,cv2.COLOR_BGR2RGB)
    plt.imshow(image_copy)

    下面是采用RGB通道:

    r = image_copy[:,:,0]
    g = image_copy[:,:,1]
    b = image_copy[:,:,2]
    f,(ax1,ax2,ax3) = plt.subplots(1,3,figsize=(20,10))
    ax1.set_title('Red')
    ax1.imshow(r,cmap='gray')
    ax2.set_title('Green')
    ax2.imshow(g,cmap='gray')
    ax3.set_title('Blue')
    ax3.imshow(b,cmap='gray')

    下面是采用HSV通道:

    hsv = cv2.cvtColor(image_copy,cv2.COLOR_RGB2HSV)
    h = hsv[:,:,0]
    s = hsv[:,:,1]
    v = hsv[:,:,2]
    f,(ax1,ax2,ax3) = plt.subplots(1,3,figsize=(20,10))
    ax1.set_title('Hue')
    ax1.imshow(h,cmap='gray')
    ax2.set_title('Saturation')
    ax2.imshow(s,cmap='gray')
    ax3.set_title('Value')
    ax3.imshow(v,cmap='gray')

    lower_pink = np.array([180,0,100])
    upper_pink = np.array([255,255,230])
    lower_hue = np.array([160,0,0])
    upper_hue = np.array([180,255,255]) #允许小范围的高值色相通过 通道范围在 160 - 180 之间,饱和度和明度通道则不作限制 都为 0 - 255
    mask_rgb = cv2.inRange(image_copy,lower_pink,upper_pink)
    masked_image = np.copy(image_copy)
    masked_image[mask_rgb == 0] = [0,0,0]
    plt.imshow(masked_image)
    plt.title('RGB selection')

    mask_hsv = cv2.inRange(hsv,lower_hue,upper_hue)
    masked_image = np.copy(image_copy)
    masked_image[mask_hsv == 0] = [0,0,0]
    plt.imshow(masked_image)
    plt.title('hsv selection')

    emmmm,按道理hsv更擅长选择处于不同光线下的区域的,但我我这个。。。翻车了,图片选择不太对,记住结论就好。。。

     在HSV中,V受光照的影响最大,而H基本不受阴影或过高亮度的影响,如果我们依靠这个通道,舍弃V通道的信息,那就能对彩色物体进行检测,而且效果会比在RGB颜色空间中更为可靠。

  • 相关阅读:
    TPCx-BB官宣最新世界纪录,阿里巴巴计算力持续突破
    Java 编程技巧之数据结构
    从零开始入门 K8s | Kubernetes 网络概念及策略控制
    从零开始入门 K8s | 可观测性:监控与日志
    如何在 Knative 中部署 WebSocket 和 gRPC 服务?
    全球首个开放应用模型 OAM 开源
    开放应用模型(OAM):全球首个云原生应用标准定义与架构模型
    一文读懂分布式架构知识体系(内含超全核心知识大图)
    更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读
    数论练习(1)——取余运算(快速幂)
  • 原文地址:https://www.cnblogs.com/roscangjie/p/10825929.html
Copyright © 2011-2022 走看看