识别图片中物体的方法有很多种,如果要识别出的物体是颜色鲜明的,那么先用颜色来分离一下物体和背景是一种不错的思路.

比如我们要分离这张图片的天空和金字塔

cv2.inRange(hsv, low, high)

cv2.inRange()函数接收一个hsv的图片数据,一个最低阈值和一个最高阈值,输出一个灰度图片.当图片的色值在阈值之间,数据被设置为255显示白色,如果在小于最低阈值或高于最高阈值,图片数据会被设置为0,显示为黑色.

下一步我们可以用这个灰度图片做遮罩,白色显示原图,黑色部分遮挡掉原图.
可以使用

cv2.bitwise_and(img,img, mask= mask)

也可以使用numpy的计算

img[mask != 255] = [0, 0, 0]

# coding=utf-8

import cv2
import numpy as np

def apply_color_mask(hsv,img,low,high):
    # Apply color mask to image
    mask = cv2.inRange(hsv, low, high)
    res = cv2.bitwise_and(img,img, mask= mask)
    return res

img = cv2.imread('b.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
mask = apply_color_mask(hsv,img,(0,0,0),(30,240,255))
cv2.imshow("result", mask)
cv2.waitKey(5000)

多种颜色遮罩

对于想提取多种颜色,可以分别把每个颜色提取出来,然后再合并起来.
下面是提取白色和黄色的方法.

mask_yellow = cv2.inRange(hsv, (0, 100, 100), (80, 255, 255))
mask_white = cv2.inRange(hsv, (0, 0, 160), (255, 80, 255))
mask_lane = cv2.bitwise_or(mask_yellow, mask_white)
posted @ 2018-05-15 19:19:16
评论加载中...

发表评论