首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在for循环中更改亮度只接受第一个参数

在for循环中更改亮度只接受第一个参数
EN

Stack Overflow用户
提问于 2020-07-20 16:54:20
回答 2查看 50关注 0票数 0

我正在分析一个非常低帧率的视频。如果视频中的某些内容符合我的要求,则计数将增加1。一旦计数达到3,屏幕亮度将降低,然后再次增加,然后返回到默认设置(开始亮度)。

我一开始就是这样得到当前屏幕亮度的:

代码语言:javascript
复制
objWMI = GetObject('winmgmts:\\\\.\\root\\WMI').InstancesOf('WmiMonitorBrightness')
for obj in objWMI:
    startpointbrightness = obj.CurrentBrightness
print(startpointbrightness)

我的循环定义如下(以降低帧率):

代码语言:javascript
复制
frame_rate = 0.3
prev = 0
cap = cv2.VideoCapture(0)
framerate = cap.get(5)
count = 0

while True:

# Grab a single frame of video every frame-rate
    time_elapsed = time.time() - prev
    ret, frame = cap.read()
    if time_elapsed > 1./frame_rate:
        prev = time.time()

        if label == "action_happened":
            count = count + 1
            if count == 3:
                methods.WmiSetBrightness(0, 0)
                methods.WmiSetBrightness(1, 100)
                methods.WmiSetBrightness(1, startpointbrightness)

问题是只处理最后一条if语句中的第一行methods.WmiSetBrightness(0,0)

任何帮助都非常感谢。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-07-20 17:20:18

https://docs.microsoft.com/en-us/windows/win32/wmicoreprov/wmisetbrightness-method-in-class-wmimonitorbrightnessmethods

WmiSetBrightness方法接受两个参数。第一个是以秒为单位的时间。你指的是第一个参数中的1秒吗?

票数 0
EN

Stack Overflow用户

发布于 2020-07-21 02:10:28

我问了鸭子,但找不到任何文档来真正解释超时参数的用途。

我确实找到了这个项目(我不运行Windows,所以我无法检查),可以成功地使用相同的调用:

https://github.com/blackholeearth/Win10_BrightnessSlider/blob/master/Win10_BrightnessSlider/Form1.cs

代码语言:javascript
复制
foreach (ManagementObject mObj in objectCollection)
{
    mObj.InvokeMethod("WmiSetBrightness",
                      new Object[] { UInt32.MaxValue, targetBrightness });
    break;
}

循环遍历对象并总是中断,基本上就是在列表中的第一个对象上调用方法。我不知道这是不是你想要的。

我建议您不要尝试同时进行所有这三个设置。相反,您应该构建一个状态机,并在每次通过外部循环时更新它:

代码语言:javascript
复制
def set_monitor_brightness(percent):
    """Under Windows, use WMI to set monitor brightness to a percentage of maximum"""
    timeout = 2 ** 32 - 1
    methods.WmiSetBrightness(timeout, percent)

Monitor_blink_state = None

def start_monitor_blink():
    """ Begin a 'monitor blink' to draw the user's attention"""

    global Monitor_blink_state
    Monitor_blink_state = "MIN"
    set_monitor_brightness(0)

def update_monitor_blink():
    """Update a monitor blink, if one is happening."""

    global Monitor_blink_state

    if Monitor_blink_state is None:
        return

    if Monitor_blink_state == "MIN":
        Monitor_blink_state = "MAX"
        set_monitor_brightness(100)
    elif Monitor_blink_state == "MAX":
        Monitor_blink_state = None
        set_monitor_brightness(startpointbrightness)

# ... later ...        

while True:
    update_monitor_blink()

    # rest of your code

        if count == 3:
            start_monitor_blink()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62991866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档