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)