python - 如何将HSV色彩空间的V channel 的值设置为恒定值

标签 python numpy opencv image-processing color-space

我正在研究一个对象检测问题,我必须检测小型彩色汽车。我使用颜色作为目标对象的主要特征表示并应用直方图 back_projection。
但是,如您所知,很难保持颜色一致性,因为颜色具有高度的照度变化。但是,如果我可以测量亮度如何变化,我可以控制颜色的变化。
因此,我将视频帧转换为 HSV,因为 V channel 代表图像的亮度(亮度),我使用以下代码计算了该 channel 的最小/最大平均值:

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 channel 的值从172-->137下降。因此,如果我将v channel 的值设置为始终为172,则视频中的颜色理论上是相同的。
所以我的问题是:
如果可能的话,我如何将 V channel 的值设置为常数值 = 172?
提前致谢

最佳答案

您可以使用 numpy 语法将 channel 的值设置为 Python/OpenCV 中的某个常量,如下所示

v[:,:] = 172
这会将图像中的每个 x,y 灰度值设置为 172。

关于python - 如何将HSV色彩空间的V channel 的值设置为恒定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64177767/

相关文章:

python - OpenCV-平滑边框

python - 检查numpy数组是否连续?

python - cv2.HoughCircles 找不到循环时

python - int()参数必须是字符串,类似字节的对象或数字,而不是 'NoneType'

opencv - 扭曲的 3D 重建 OPENCV + PCL(Martin Peris 代码)

python - Pygit2 - merge 没有快进的分支

python - Flask/Werkzeug 请求对象表单参数

python - 多次快速切片 numpy 数组

python - 为什么在使用 python 和 numpy 时 sin(180) 不为零?

python - max 和 np.max 之间的差异