如何将HSV颜色space的V通道的值设置为一个常量值
How to set the value of the V-channel of the HSV color space to a constant value
我正在研究一个对象检测问题,我必须检测小型彩色汽车。我使用颜色作为目标对象的主要特征表示,并应用直方图 back_projection.
但是,如您所知,很难保持颜色的一致性,因为颜色的照度变化很大。但是,如果我可以测量亮度如何变化,我就可以控制颜色的变化。
因此,我将视频帧转换为 HSV,因为 V 通道表示图像的亮度(亮度),我使用以下代码计算了该通道的 min/max 平均值:
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
cap=cv.VideoCapture(r'C:/Users/kjbaili/Docum_changes.mp4')
Mean_list=[]
while cap.isOpened:
ret,frame=cap.read()
if ret!=True:
print("cant open Video, please check your source")
break
else:
HSV=cv.cvtColor(frame.copy(),cv.COLOR_BGR2HSV)
h,s,v=cv.split(HSV)
cv.imshow('HSV_image',HSV)
MEAN_V=v.mean()
Mean_list.append(MEAN_V)
print('mean_V',MEAN_V)
cv.waitKey(1)
print('Minimum_ lightness ', min(Mean_list))
print('Maximum_lightness ',max( Mean_list))
cv.destroyAllWindows()
结果是
Minimum_ lightness 137.57618546786645
Maximum_lightness 172.9926900112821
因此通过观察视频,V通道的值从172下降-->137.Therefore,如果我将v通道的值设置为始终为172,则视频中的颜色将理论上是一样的。
所以我的问题是:
如果可能的话,我怎样才能将V通道的值设置为一个常数值= 172?
提前致谢
您可以使用 numpy 语法将通道的值设置为 Python/OpenCV 中的某个常量,如下所示
v[:,:] = 172
这会将图像中的每个 x,y 灰度值设置为 172。
我正在研究一个对象检测问题,我必须检测小型彩色汽车。我使用颜色作为目标对象的主要特征表示,并应用直方图 back_projection.
但是,如您所知,很难保持颜色的一致性,因为颜色的照度变化很大。但是,如果我可以测量亮度如何变化,我就可以控制颜色的变化。
因此,我将视频帧转换为 HSV,因为 V 通道表示图像的亮度(亮度),我使用以下代码计算了该通道的 min/max 平均值:
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
cap=cv.VideoCapture(r'C:/Users/kjbaili/Docum_changes.mp4')
Mean_list=[]
while cap.isOpened:
ret,frame=cap.read()
if ret!=True:
print("cant open Video, please check your source")
break
else:
HSV=cv.cvtColor(frame.copy(),cv.COLOR_BGR2HSV)
h,s,v=cv.split(HSV)
cv.imshow('HSV_image',HSV)
MEAN_V=v.mean()
Mean_list.append(MEAN_V)
print('mean_V',MEAN_V)
cv.waitKey(1)
print('Minimum_ lightness ', min(Mean_list))
print('Maximum_lightness ',max( Mean_list))
cv.destroyAllWindows()
结果是
Minimum_ lightness 137.57618546786645
Maximum_lightness 172.9926900112821
因此通过观察视频,V通道的值从172下降-->137.Therefore,如果我将v通道的值设置为始终为172,则视频中的颜色将理论上是一样的。
所以我的问题是: 如果可能的话,我怎样才能将V通道的值设置为一个常数值= 172?
提前致谢
您可以使用 numpy 语法将通道的值设置为 Python/OpenCV 中的某个常量,如下所示
v[:,:] = 172
这会将图像中的每个 x,y 灰度值设置为 172。