目錄
一、基礎理論
1、Hue(色相)
2、Value(明度)
3、Saturation(飽和度)
二、hsv三通道及單通道效果
三、*args && **args
*args:
**args:
四、滾動條控制h、s、v(min && max)
1、創建滾動條
API
2、回呼函式 -- 閾值設定
API
inRange()
3、回呼函式 -- 感興趣值
API
bitwise_and()
總代碼
參考資料
一、基礎理論
HSV:HSV是一種為了加快調色效率,且易于理解的概念,
Hue:色相(具體的顏色)
Saturation:飽和度
Value:明度
1、Hue(色相)
Hue:色相(具體的顏色)

2、Value(明度)
明度:色彩的明亮程度,單通道亮度(并不等同于整體發光量),
(明度越高越白,越低越黑,一般提高明度會同時提高R、G、B三通道的數值)
3、Saturation(飽和度)
Saturation:飽和度、色彩純度,(越低越灰,越高越純)
(一般調高飽和度會降低RGB中相對較低的數值,凸顯主要顏色的純度, )

B站視頻講解:
短影片慢語速1分鐘講清影視調色中色彩形成原理基礎——RGB與HSV
二、hsv三通道及單通道效果



三、*args && **args
*args:
*args:傳入引數未知,且不需要知道引數名稱,

**args:
**args:傳入引數未知,但需要知道引數名稱,

四、滾動條控制h、s、v(min && max)
1、創建滾動條
API
CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange = 0, void* userdata = 0);形式引數一、trackbarname:滑動空間的名稱;
形式引數二、winname:滑動空間用于依附的影像視窗的名稱;
形式引數三、value:初始化閾值;
形式引數四、count:滑動控制元件的刻度范圍;
形式引數五、TrackbarCallback:是回呼函式,其定義如下:
typedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata);
# 3、創建h、s、v滾動條
cv2.createTrackbar('hmin', 'h', 12, 179, Renew)
cv2.createTrackbar('hmax', 'h', 37, 179, Renew)
cv2.createTrackbar('smin', 's', 12, 179, Renew)
cv2.createTrackbar('smax', 's', 37, 179, Renew)
cv2.createTrackbar('vmin', 'v', 12, 179, Renew)
cv2.createTrackbar('vmax', 'v', 37, 179, Renew)

2、回呼函式 -- 閾值設定
API
inRange()
主要是將在兩個閾值內的像素值設定為白色(255),而不在閾值區間內的像素值設定為黑色(0),該功能類似于之間所講的雙閾值化操作,
void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);
- 引數1:輸入要處理的影像,可以為單通道或多通道,
- 引數2:包含下邊界的陣列或標量,
- 引數3:包含上邊界陣列或標量,
- 引數4:輸出影像,與輸入影像src 尺寸相同且為CV_8U 型別,
(注:dst輸出二值化之后的影像)
# 1、獲取滑動條反饋值
hmin = cv2.getTrackbarPos('hmin', 'h')
hmax = cv2.getTrackbarPos('hmax', 'h')
smin = cv2.getTrackbarPos('smin', 's')
smax = cv2.getTrackbarPos('smax', 's')
vmin = cv2.getTrackbarPos('vmin', 'v')
vmax = cv2.getTrackbarPos('vmax', 'v')
# 2、設定閾值(inRange:在閾值(min,max)之內,設定為白色;在閾值之外,設定為黑色)
h_thresh = cv2.inRange(np.array(h), np.array(hmin), np.array(hmax))
s_thresh = cv2.inRange(np.array(s), np.array(smin), np.array(smax))
v_thresh = cv2.inRange(np.array(v), np.array(vmin), np.array(vmax))

3、回呼函式 -- 感興趣值
API
bitwise_and()
影像的與運算主要用于獲取某個影像中感興趣的部分,是針對兩個影像矩陣陣列或一個陣列與標量的按位與,
# 3、獲取感興趣二值(與運算)
interest = cv2.bitwise_and(h_thresh, cv2.bitwise_and(s_thresh, v_thresh))

總代碼
# HSV顏色空間與滑動條(*args && **args)
import cv2
import numpy as np
# 回呼函式
# *args:傳入引數未知,且不需要知道引數名稱
# **args:傳入引數未知,但需要知道引數名稱
def HSV_CallBack(*args):
# 1、獲取滑動條反饋值
hmin = cv2.getTrackbarPos('hmin', 'h_binary')
hmax = cv2.getTrackbarPos('hmax', 'h_binary')
smin = cv2.getTrackbarPos('smin', 's_binary')
smax = cv2.getTrackbarPos('smax', 's_binary')
vmin = cv2.getTrackbarPos('vmin', 'v_binary')
vmax = cv2.getTrackbarPos('vmax', 'v_binary')
# 2、設定閾值(inRange:在閾值(min,max)之內,設定為白色;在閾值之外,設定為黑色)
h_binary = cv2.inRange(np.array(h), np.array(hmin), np.array(hmax))
s_binary = cv2.inRange(np.array(s), np.array(smin), np.array(smax))
v_binary = cv2.inRange(np.array(v), np.array(vmin), np.array(vmax))
# 3、獲取感興趣二值(與運算)
binary = cv2.bitwise_and(h_binary, cv2.bitwise_and(s_binary, v_binary))
# 4、顯示
cv2.imshow('h_binary', h_binary)
cv2.imshow('s_binary', s_binary)
cv2.imshow('v_binary', v_binary)
cv2.imshow('binary', binary)
def Show_HSV():
global hsv, h, s, v
# 0、創建視窗
cv2.namedWindow('h_binary')
cv2.namedWindow('s_binary')
cv2.namedWindow('v_binary')
# 1、獲取hsv圖片
hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
cv2.imshow('hsv', hsv)
# 2、獲取h、s、v三通道圖片
h, s, v = cv2.split(hsv)
# 3、創建h、s、v滾動條
cv2.createTrackbar('hmin', 'h_binary', 12, 179, HSV_CallBack)
cv2.createTrackbar('hmax', 'h_binary', 37, 179, HSV_CallBack)
cv2.createTrackbar('smin', 's_binary', 12, 179, HSV_CallBack)
cv2.createTrackbar('smax', 's_binary', 37, 179, HSV_CallBack)
cv2.createTrackbar('vmin', 'v_binary', 12, 179, HSV_CallBack)
cv2.createTrackbar('vmax', 'v_binary', 37, 179, HSV_CallBack)
HSV_CallBack()
if __name__ == '__main__':
global img
img = cv2.imread('Resource/test.jpg')
cv2.imshow('img', img)
# 顯示h、s、v
Show_HSV()
cv2.waitKey(0)
參考資料
短影片慢語速1分鐘講清影視調色中色彩形成原理基礎——RGB與HSV_嗶哩嗶哩_bilibili
??????Python中*args、**args到底是什么、有啥區別、怎么用_qq_1170407931的博客-CSDN博客_argscreateTrackbar使用方法及步驟_mysee1989的專欄-CSDN博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301618.html
標籤:其他
