OpenCV_识别颜色

目录

  • 前言
  • inRange函数
    • C++
    • Python
    • 整体代码_Python
    • 结果

前言

方法:将一副图像的空间转换到hsv颜色空间,然后利用inRange函数设阈值,去除背景部分。空间转换之前(图片各种格式间的转化)已经说过了,所以这次只说inRange函数。各颜色HSV阈值如下,在实际设置阈值时需要根据实际情况调整。
OpenCV_识别颜色_第1张图片

inRange函数

C++

函数调用:

void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst)

参数详解如下:
src:输入图像,CV2常用Mat类型;
lowerb:lower boundary下限,scalar类型的像素值,单通道scalar取一个值就行,彩图3通道scalar三个值;
upperb:上限,类型与lowerb同理;
dst:输出图像,尺寸与src一致,类型是CV_8U,但没有指定通道数。
实际应用:

inRange(hsv, Scalar(hmin, smin, vmin), Scalar(hmax, smax, vmax), mask);

Python

函数调用:

cv2.inRange(src, lowerb, upperb[, dst]) → dst

实际应用-----Python:

mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0,

整体代码_Python

import numpy as np
import cv2

#通过摄像头捕获实时图像数据
cap = cv2.VideoCapture(1)
#设置视频参数,   设置视频的宽高值和摄像头有关
cap.set(3,480)
cap.set(4,320)
lower_blue = np.array([80, 43, 46])
upper_blue = np.array([124,255,255])
while(True):
    #Capture frame-by-frame
    ret, frame = cap.read()

     #窗口显示,显示名为 frame
    cv2.imshow('frame',frame)

    #转换到hsv颜色空间
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    #设阈值,去除背景部分
    mask = cv2.inRange(hsv, lower_blue, upper_blue) #lower20===>0,upper200==>0
    #显示处理后的图像
    cv2.imshow('mask', mask)
    #若检测到按键 ‘q’,退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

#释放摄像头
cap.release()
#删除建立的全部窗口
cv2.destroyAllWindows()

结果

OpenCV_识别颜色_第2张图片

你可能感兴趣的:(OpenCV)