如何将HSV颜色空间的V通道的值设置为恒定值

我正在研究一个物体检测问题,我必须检测小型彩色汽车。我使用颜色作为目标对象的主要特征表示,并应用直方图反投影。


然而,如您所知,很难保持颜色一致性,因为颜色的照度变化很大。然而,如果我可以测量亮度如何变化,我就可以控制颜色的变化。


因此,我将视频帧转换为 HSV,因为 V 通道代表图像的亮度(亮度),我使用以下代码计算该通道的最小/最大平均值:


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下降。因此,如果我将v通道的值设置为始终172,那么理论上视频中的颜色将是相同的。


所以我的问题是:如果可能的话,我怎样才能将V通道的值设置为常数值= 172?


提前致谢


摇曳的蔷薇
浏览 89回答 1
1回答

绝地无双

您可以使用 numpy 语法将通道的值设置为 Python/OpenCV 中的某个常量,如下所示v[:,:] = 172这会将图像中的每个 x,y 灰度值设置为 172。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python