• 使用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的投射。

  • 相关阅读:
    ADO.NET FOR MySQL帮助类
    遍历文件夹及其子文件夹下的.pdf文件,并解压文件夹下所有的压缩包
    history.back();谷歌浏览器,iframe后退问题
    Request.url请求属性
    正则表达式 取两字符中间的字符串(双向非贪婪模式)
    MVC 项目中为什么会有两个web.config
    c#动态编译并动态生成dll
    siteserver cms选择栏目搜索无效
    jquery修改Switchery复选框的状态
    ntko office在线编辑控件问题记录
  • 原文地址:https://www.cnblogs.com/puheng/p/9228473.html
Copyright © 2020-2023  润新知