Opencv_Python 官方教程 第八章 Opencv中的图像处理之颜色空间转换

• 你将学习如何对图像进行颜色空间转换,比如从 BGR 到灰度图,或者从
BGR 到 HSV 等。
• 我们将要学习的函数有:cv2.cvtColor(),cv2.inRange() 等。

13.1 转换颜色空间

cv2.cvtColor(input_image,flag)
其中 flag就是转换类型。

  • 对于 BGR↔Gray 的转换,我们要使用的 flag 就是 cv2.COLOR_BGR2GRAY。
  • 同样对于 BGR↔HSV 的转换,我们用的 flag 就是 cv2.COLOR_BGR2HSV。
    在 OpenCV 的 HSV 格式中,H(色彩/色度)的取值范围是 [0,179],S(饱和度)的取值范围 [0,255],V(亮度)的取值范围 [0,255]。但是不同的软件使用的值可能不同。所以当你需要拿 OpenCV 的 HSV 值与其他软件的 HSV 值进行对比时,一定要记得归一化。

13.2物体跟踪

  • cv2.inrange是OpenCV(Python版)的函数库中常用的一个函数,该函数可以帮助开发者实现指定范围内的颜色选择,也就是在图像处理中对指定区域的像素进行筛选。这个函数能快速的对图像的颜色、亮度等进行筛选输出符合要求的像素值集合,而且比较易于使用,常用于图像的前处理工作中,如目标颜色检测等,对于图像的关键颜色分离,该函数也是非常有用的。

  • 现在我们知道怎样将一幅图像从 BGR 转换到 HSV 了,我们可以利用这一点来提取带有某个特定颜色的物体。在 HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。在我们的程序中,我们要提取的是一个蓝色的物体。

  • 步骤:
    • 从视频中获取每一帧图像
    • 将图像转换到 HSV 空间
    • 设置 HSV 阈值到蓝色范围。
    • 获取蓝色物体,当然我们还可以做其他任何我们想做的事,比如:在蓝色
    物体周围画一个圈

cap = cv2.VideoCapture(0)

while (True):
    # 获取每一帧
    ret, frame = cap.read()
    # 转换到HSV,在HSV空间更加容易表示一个特点颜色
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 设定蓝色阈值 这里设定的是RGB三个通道
    lower_blue = np.array([110, 50, 50])
    upper_blue = np.array([130, 255, 255])
    # 根据阈值构建掩模
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # 对原图像进和掩模进行位运算
    res = cv2.bitwise_and(frame,frame,mask=mask)
    # 显示图像
    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)

    k = cv2.waitKey(5)&0xFF
    if k==27:
        break
cv2.destroyAllWindows()

13.3怎样找到要跟踪对象的HSV值

  • 使用滑块来确定识别性最好的HSV:
def nothing(x):
    pass

blue = np.uint8([[[255, 0, 0]]])
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)


cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)
cv2.createTrackbar('Hue min', 'image', 10, 179, nothing)
cv2.createTrackbar('Hue max', 'image', 10, 179, nothing)
cv2.createTrackbar('sat min', 'image', 10, 255, nothing)
cv2.createTrackbar('sat max', 'image', 10, 255, nothing)
cv2.createTrackbar('val min', 'image', 10, 255, nothing)
cv2.createTrackbar('val max', 'image', 10, 255, nothing)
cap = cv2.VideoCapture(0)


while (1):
    h_min = cv2.getTrackbarPos('Hue min', 'image')
    h_max = cv2.getTrackbarPos('Hue max', 'image')
    s_min = cv2.getTrackbarPos('sat min', 'image')
    s_max = cv2.getTrackbarPos('sat max', 'image')
    v_min = cv2.getTrackbarPos('val min', 'image')
    v_max = cv2.getTrackbarPos('val max', 'image')

    ret,img = cap.read()
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    lower = [h_min, s_min, v_min]
    upper = [h_max, s_max, v_max]
    lower = np.array(lower)
    upper = np.array(upper)
    print(lower,'-------------',upper)
    mask = cv2.inRange(hsv, lower, upper)

    # lower_blue = np.array([110, 50, 50])  # 经调试最好的:[107  34  11]
    # upper_blue = np.array([130, 255, 255]) # 经调试最好的:[179 255 255]
    # mask = cv2.inRange(hsv, lower_blue, upper_blue)

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

    cv2.imshow('img', img)
    cv2.imshow('mask',mask)
    cv2.imshow('res', res)

    k = cv2.waitKey(5)&0xFF
    if k==27:
        break
cv2.destroyAllWindows()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值