034-OpenCV HSV颜色识别图片

话不多说,上代码,看结果。

import cv2           # 导入库
import numpy as np
font = cv2.FONT_HERSHEY_SIMPLEX
'''  
    cv2.imread(filename,flags)
# filename为文件名,图片与.py文件在一个文件夹时输入文件名即可
# 不在一个文件夹时输入图片的路径和名字
# flags为图片的颜色类型,默认为1,灰度图像为0
'''
img = cv2.imread('45.jpg')
'''
    cv2.cvtColor()
# 颜色空间转换
# img为要转换的图像,后者为转换的格式
# 颜色空间有很多种,最常见的就是RGB颜色空间
# R红色,G绿色,B蓝色,OpenCV中顺序是BGR!!!!!!!
# [255, 0,0]是蓝色,[0, 255, 0]表示绿色,[0, 0, 255]表示红色
    HSV颜色空间
# 也挺常用的,H是色调,S是饱和度,V是明度,具体百度就行
# H---不同的颜色(红色/绿色/蓝色)---范围: 0~360
# S---颜色深浅(浅红/深红)---范围: 0.0~1.0
# V---颜色亮暗(暗红/亮红)---范围: 0.0~1.0
# OpenCV默认的HSV范围分别是:
# H: 0~180, S: 0~255, V: 0~255
'''
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
'''
cv2.namedWindow(winname,flags)
#  winname是窗口名字
#  flags为窗口显示方式,cv2.WINDOW_NORMAL为正常显示,可以调整大小
# cv2.WINDOW_AUTOSIZE显示原图片的大小,用户不能调整大小
'''
cv2.namedWindow('hsv', cv2.WINDOW_NORMAL)
'''
   cv2.imshow(winname,mat)
# winname为显示的窗口
# mat 需要显示的图像
'''
cv2.imshow('hsv', hsv)
lower_green = np.array([35, 43, 46])   # 颜色范围低阈值
upper_green = np.array([77, 255, 255])  # 颜色范围高阈值
lower_blue = np.array([100, 43, 46])   # 颜色范围低阈值
upper_blue = np.array([124, 255, 255])  # 颜色范围高阈值
lower_black = np.array([0, 0, 0])   # 颜色范围低阈值
upper_black = np.array([180, 255, 46])  # 颜色范围高阈值
lower_gray = np.array([0, 0, 46])   # 颜色范围低阈值
upper_gray = np.array([180, 43, 220])  # 颜色范围高阈值
lower_white = np.array([0, 0, 221])   # 颜色范围低阈值
upper_white = np.array([180, 30, 255])  # 颜色范围高阈值
lower_red = np.array([0, 43, 46])   # 颜色范围低阈值
upper_red = np.array([10, 255, 255])  # 颜色范围高阈值
# 红色或者是这个
# lower_red = np.array([156, 43, 46])   # 颜色范围低阈值
# upper_red = np.array([180, 255, 255])  # 颜色范围高阈值
lower_orange = np.array([11, 43, 46])   # 颜色范围低阈值
upper_orange = np.array([25, 255, 255])  # 颜色范围高阈值
lower_yellow = np.array([26, 43, 46])   # 颜色范围低阈值
upper_yellow = np.array([34, 255, 255])  # 颜色范围高阈值

lower_cyan = np.array([78, 43, 46])   # 青色范围低阈值
upper_cyan = np.array([99, 255, 255])  # 青色范围高阈值
lower_purple = np.array([125, 43, 46])   # 颜色范围低阈值
upper_purple = np.array([155, 255, 255])  # 颜色范围高阈值
'''
        cv2.inRange(src, lowerb, upperb, dst)
    # src: 输入原图或数组
    # lowerb: 低边界或者颜色阈值
    # upperb: 高边界或者颜色阈值
    # dst: 输出目标图像, 需要和原图一样的size并且类型需为CV_8U
    '''
mask_green = cv2.inRange(hsv, lower_green, upper_green)   # 根据颜色范围删选
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)   # 根据颜色范围删选
'''
    cv2.medianBlur(src, ksize, dst)
    中值滤波 一种非线性滤波, 是用像素点邻域灰度值的中值代替该点的灰度值, 可以去除脉冲噪声和椒盐噪声
# src 要滤波的图像  dst 输出图像
# ksize  int类型的孔径的线性尺寸, 大于1的奇数
'''
mask_green = cv2.medianBlur(mask_green, 5)  # 中值滤波
mask_blue = cv2.medianBlur(mask_blue, 5)
cv2.imshow('mask_green', mask_green)
cv2.imshow('mask_blue', mask_blue)
mask_green, contours_green, hierarchy_green = cv2.findContours(mask_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
mask_blue, contours_blue, hierarchy_blue = cv2.findContours(mask_blue, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
while 1:
    for cnt in contours_green:
        (x, y, w, h) = cv2.boundingRect(cnt)
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 2)
        cv2.putText(img, "green", (x, y - 5), font, 0.7, (0, 255, 0), 2)
    for cnt in contours_blue:
        (x, y, w, h) = cv2.boundingRect(cnt)
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 255), 2)
        cv2.putText(img, "blue", (x, y - 5), font, 0.7, (0, 255, 0), 2)
    cv2.imshow('result', img)
    if cv2.waitKey(10) & 0xFF == 27:
        break
cv2.destroyAllWindows()

结果如下图。
034-OpenCV HSV颜色识别图片_第1张图片
034-OpenCV HSV颜色识别图片_第2张图片
就先这样,遇到别的再补充。

你可能感兴趣的:(OpenCV学习,opencv,计算机视觉,python,图像处理,pycharm)