RGB HSV 影像處理 顏色 識別 / 辨別 / 判讀 / 辨識
RGB HSV 影像處理 顏色 識別 / 辨別 / 判讀 / 辨識
資料來源:https://blog.csdn.net/Taily_Duan/article/details/51506776
https://zh.wikipedia.org/wiki/HSL%E5%92%8CHSV%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4
EX: OpenCV better detection of red color? [OPENCV HSV RED]
//https://stackoverflow.com/questions/32522989/opencv-better-detection-of-red-color #include <opencv2\opencv.hpp> using namespace cv; int main() { Mat3b bgr = imread("path_to_image"); Mat3b hsv; cvtColor(bgr, hsv, COLOR_BGR2HSV); Mat1b mask1, mask2; inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1); inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2); Mat1b mask = mask1 | mask2; imshow("Mask", mask); waitKey(); return 0; }
EX:偵測綠色
# 可从视频中跟踪指定颜色,指定颜色置为白,其余置为黑 def extract_object_demo(): capture=cv.VideoCapture("./images/vtest.avi") while(True): ret,frame=capture.read() if ret ==False: break hsv=cv.cvtColor(frame,cv.COLOR_BGR2HSV) lower_hsv = np.array([35, 43, 46]) # 对应的绿色的hsv中h,s,v的最小值 upper_hsv = np.array([77, 255, 255]) #对应的绿色的hsv中的h,s,v最大值 mask=cv.inRange(hsv,lowerb=lower_hsv,upperb=upper_hsv) cv.imshow("video",frame) cv.imshow("mask",mask) c=cv.waitKey(40) if c==27: break
展示的RGB值的範圍是0.0到1.0。
RGB | HSL | HSV | 結果 |
---|---|---|---|
(1, 0, 0) | (0°, 1, 0.5) | (0°, 1, 1) | |
(0.5, 1, 0.5) | (120°, 1, 0.75) | (120°, 0.5, 1) | |
(0, 0, 0.5) | (240°, 1, 0.25) | (240°, 1, 0.5) |
EX: OpenCV—HSV色彩空間基礎知識[cvtColor偵測-紅綠藍]
//https://blog.csdn.net/cyj972628089/article/details/106880398 import cv2 import numpy as np #=========测试下OpenCV中蓝色的HSV模式值============= imgBlue=np.zeros([1,1,3],dtype=np.uint8) imgBlue[0,0,0]=255 Blue=imgBlue BlueHSV=cv2.cvtColor(Blue,cv2.COLOR_BGR2HSV) print("Blue=\n",Blue) print("BlueHSV=\n",BlueHSV) #=========测试下OpenCV中绿色的HSV模式值============= imgGreen=np.zeros([1,1,3],dtype=np.uint8) imgGreen[0,0,1]=255 Green=imgGreen GreenHSV=cv2.cvtColor(Green,cv2.COLOR_BGR2HSV) print("Green=\n",Green) print("GreenHSV=\n",GreenHSV) #=========测试下OpenCV中红色的HSV模式值============= imgRed=np.zeros([1,1,3],dtype=np.uint8) imgRed[0,0,2]=255 Red=imgRed RedHSV=cv2.cvtColor(Red,cv2.COLOR_BGR2HSV) print("Red=\n",Red) print("RedHSV=\n",RedHSV)
展示的RGB值的範圍是0到255。
名稱 | 顏色 | 色光 | 色料 | 色相 | 代碼 | MS-DOS | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
R | G | B | C | M | Y | K | 角度 | 飽和 | 明度 | ||||
紅色 | 255 | 0 | 0 | 0 | 255 | 255 | 0 | 0° | 100% | 100% | #FF0000 | 12 | |
黃色 | 255 | 255 | 0 | 0 | 0 | 255 | 0 | 60° | 100% | 100% | #FFFF00 | 14 | |
綠色 | 0 | 255 | 0 | 255 | 0 | 255 | 0 | 120° | 100% | 100% | #00FF00 | 10 | |
青色 | 0 | 255 | 255 | 255 | 0 | 0 | 0 | 180° | 100% | 100% | #00FFFF | 11 | |
藍色 | 0 | 0 | 255 | 255 | 255 | 0 | 0 | 240° | 100% | 100% | #0000FF | 9 | |
品紅色 | 255 | 0 | 255 | 0 | 255 | 0 | 0 | 300° | 100% | 100% | #FF00FF | 13 | |
栗色 | 128 | 0 | 0 | 0 | 255 | 255 | 127 | 0° | 100% | 50% | #800000 | 4 | |
橄欖色 | 128 | 128 | 0 | 0 | 0 | 255 | 127 | 60° | 100% | 50% | #808000 | 6 | |
深綠色 | 0 | 128 | 0 | 255 | 0 | 255 | 127 | 120° | 100% | 50% | #008000 | 2 | |
藍綠色 | 0 | 128 | 128 | 255 | 0 | 0 | 127 | 180° | 100% | 50% | #008080 | 3 | |
深藍色 | 0 | 0 | 128 | 255 | 255 | 0 | 127 | 240° | 100% | 50% | #000080 | 1 | |
紫色 | 128 | 0 | 128 | 0 | 255 | 0 | 127 | 300° | 100% | 50% | #800080 | 5 | |
白色 | 255 | 255 | 255 | 0 | 0 | 0 | 0 | 0° | 0% | 100% | #FFFFFF | 15 | |
銀色 | 192 | 192 | 192 | 0 | 0 | 0 | 63 | 0° | 0% | 75% | #C0C0C0 | 7 | |
灰色 | 128 | 128 | 128 | 0 | 0 | 0 | 127 | 0° | 0% | 50% | #808080 | 8 | |
黑色 | 0 | 0 | 0 | 0 | 0 | 0 | 255 | 0° | 0% | 0% | #000000 | 0 |
One thought on “RGB HSV 影像處理 顏色 識別 / 辨別 / 判讀 / 辨識”
HSV色彩空間表和cv2.inRange()的用法 – 找出青色(cyan)
https://www.itread01.com/content/1542732610.html
hsv = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV)
lower_cyan = np.array([78,43,46])
upper_cyan = np.array(99, 255, 255])
mask = cv2.inRange(hsv, lower_cyan, upper_cyan)
cv2.imshow('hsv',mask)