【问题标题】:How to be OFF the AWB/AE of RaspberryPi Cam ( Raspi4, RaspiCamV2.1, Python, OpenCV)如何关闭 Raspberry Pi Cam 的 AWB/AGE(Raspi 4、RaspiCam V2.1、Python、OpenCV)
【发布时间】:2020-09-29 11:19:03
【问题描述】:

我正在使用 - 树莓派4 - 树莓相机ver2.1 - Python3 - OpenCV3 试图从电影中捕捉颜色并成功地使用this

但由于 AWB/AE,有时会错过目标。

我试图阻止他们

  1. OpenCVs ".set" command

    --> 不支持

  2. “raspivid”命令

    --> 不正确

  3. picamera.camera() 模块

    --> cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 是错误。

我找不到正确的方法。 希望能帮到你,谢谢。

【问题讨论】:

  • 当然也有可能会在短时间内错过目标。这取决于很多事情。但是您可以保留目标的最后一个坐标,直到下一次检测。
  • 您好,欢迎来到 SO。我不是大专家,但AFAIK你最好打开AWB/AE。您应该阅读更多关于使用相机以编程方式拍照的信息。它有很多依赖,但一般流程是“触发搜索焦点”->“锁定焦点”->“触发搜索曝光”->“锁定曝光”->“触发搜索WB”->“锁定WB”->“拍照片”。如果任何步骤失败或超时,则必须正确处理。
  • 不清楚您到底想做什么:您是否要关闭自动白平衡和自动曝光?如果是这样,那么您为什么要尝试将 BGR 转换为 HSV?
  • 谢谢你。到 anotoine,BGR 到 HSV 更容易找到选择 HUE 的颜色。
  • this 和我的代码一样。

标签: python-3.x opencv camera raspberry-pi4


【解决方案1】:

有一些属性可以控制自动白平衡 (CAP_PROP_AUTO_WB) 和自动曝光 (CAP_PROP_AUTO_EXPOSURE)。

据我所知,你可以在 python 中使用它们(而不是你链接到的代码中的原始整数值):

cap = cv2.VideoCapture(0, cv2.CAP_V4L2)
cap.set(cv2.CAP_PROP_AUTO_EXPOSURE,0)
cap.set(cv2.CAP_PROP_AUTO_WB,0)

但请注意,这不适用于所有后端,至少 GStreamer 不提供控制相机参数的方法,对于 V4L2,它取决于相机驱动程序。

您可以通过将第二个参数传递给 VideoCapture 构造函数来强制使用 API。

【讨论】:

  • 谢谢,但不幸的是,我试过了。你是对的,我的camea(= raspberrypi cam)可能不支持 cap.set(15,0)/cap.set(16,0) 因为它不起作用。 capset(10,*) 工作。
【解决方案2】:

自己解决

# -*- coding: utf-8 -*-
import cv2
import numpy as np
import picamera
import time

from picamera.array import PiRGBArray
from picamera import PiCamera

def detect(img):
    hsv_min = np.array([20,100,80])
    hsv_max = np.array([27,255,255])
    masked = cv2.inRange(img, hsv_min, hsv_max)

    return masked


def main():
    #camera mode
    camera = PiCamera()
    camera.resolution = (640, 480)
    camera.framerate = 20
    camera.awb_mode = 'fluorescent'
    camera.awb_gains = 4
    camera.exposure_mode = 'off'
    capture = PiRGBArray(camera, size=(640, 480))

    # allow the camera to warmup
    time.sleep(0.1)

    for frame in camera.capture_continuous(capture, format="bgr", use_video_port=True):
        image = frame.array
        hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

        mask = detect(hsv)

        label = cv2.connectedComponentsWithStats(mask)

        cv2.imshow("Image", image)
        cv2.imshow("Mask", mask)

        key = cv2.waitKey(1) & 0xFF
        capture.truncate(0)

        if cv2.waitKey(25) & 0xFF == ord('q'):
            break

if __name__ == '__main__':
    main() 

感谢合作!

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多