微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在研究对象检测问题,其中我必须检测小型彩色汽车。我将颜色用作目标对象的主要特征表示并应用了直方图back_projection。

但是,正如您所知,由于颜色的照度变化很大,因此很难保持颜色的一致性。但是,如果我可以测量亮度如何变化,就可以控制颜色的变化。

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

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?

预先感谢

解决方法

您可以使用numpy语法在Python / OpenCV中将通道的值设置为某个常量

v[:,:] = 172

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。