zoukankan      html  css  js  c++  java
  • 使用OpenCV提取不同颜色物体

    在我们的程序中,我们要提取的是一个蓝色的物体。下面就是就是我们要做的几步:

    • 将图像转换到HSV 空间

    • 设置HSV 阈值到蓝色范围。

    • 获取蓝色物体。

    原图片如下:

    我们需要从其中提取出蓝色的部分并显示出来。我们需要使用这样几个函数:

    cv2.cvtColor():将载入的RGB模式图片转换为HSV模式,这是因为HSV模式下能够更加容易地表示一种特定地颜色。

    cv2.inRange(src, lowerb, upperb, dst=None):将图片二值化。对于图片中的每一个像素点,将其值与lowerb和upperb进行比较,如果在这个范围内则将其设置为255,反之修改为0。使用这个函数我们可以得到ROI的掩模。

    cv2.bitwise_and():按位与运算。我们使用图片ROI的掩模与原图进行按位与运算后,可将除ROI外的其他区域像素点的值变为0,而ROI区域的值则保持不变(按照二进制进行与运算时,有1&0=0,0&0=0,0&1=0,1&1=1;掩模上ROI区域像素点的值均被修改为255,即11111111,与原图片与运算后,原图片上对应ROI区域的像素点值保持不变;掩模上ROI区域以外的值被修改为0,与原图片进行与运算后,原图上对应区域的像素点值被修改为0)。

    cv2.imshow():显示图片。

     程序代码如下:

    import cv2
    import numpy as np
    lower_blue=np.array([110,50,50])
    upper_blue=np.array([130,255,255])
    img1=cv2.imread("Blue_Green_Red.jpg")
    xsize,ysize,channel=img1.shape
    #调整图片大小
    img1=cv2.resize(img1,(ysize//2,xsize//2))
    frame=cv2.cvtColor(img1,cv2.COLOR_BGR2HSV)
    mask_blue=cv2.inRange(frame,lower_blue,upper_blue)
    res_blue=cv2.bitwise_and(frame,frame,mask=mask_blue)
    res_blue=cv2.cvtColor(res_blue,cv2.COLOR_HSV2BGR)
    cv2.imshow("mask_blue",mask_blue)
    cv2.imshow("res_blue",res_blue)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    运行结果如下:

    可以看到,蓝色区域被很好的提取出来了。这种方法在选择非矩形ROI时非常有用,常常用于logo的投射。

  • 相关阅读:
    Unity中Avatar换装实现
    Unity 导出NavMesh (可行走区域判定) 数据给服务器使用
    Unity发布安卓Splash Image适应手机、平板
    什么是展uv
    三合一收款二维码
    牛顿的八字养生经
    牛顿
    [家里蹲大学数学杂志]第412期积分与极限
    Newton's Dark Secrets《牛顿探索》
    英国《物理世界》杂志评选出世界十大物理学家
  • 原文地址:https://www.cnblogs.com/puheng/p/9228473.html
Copyright © 2011-2022 走看看