Python 3.x 如何脱离RaspberryPi Cam的AWB/AE(Raspi4、RaspiCamV2.1、Python、OpenCV)
我正在使用 -树莓型4 -覆盆子照相机2.1版 -蟒蛇3 -OpenCV3 试图从电影中捕捉色彩,并成功地模仿 但由于AWB/AE,有时会错过目标 我试图阻止他们Python 3.x 如何脱离RaspberryPi Cam的AWB/AE(Raspi4、RaspiCamV2.1、Python、OpenCV),python-3.x,opencv,camera,raspberry-pi4,Python 3.x,Opencv,Camera,Raspberry Pi4,我正在使用 -树莓型4 -覆盆子照相机2.1版 -蟒蛇3 -OpenCV3 试图从电影中捕捉色彩,并成功地模仿 但由于AWB/AE,有时会错过目标 我试图阻止他们 OpenCVs“.set” -->不支持 “raspivid”命令 -->不对 picamera.camera()模块 -->cv2.CVT颜色(框架,cv2.COLOR_BGR2HSV) 这是一个错误 我找不到正确的方法。 希望能提供帮助,谢谢。有控制自动白平衡()和自动曝光()的属性 据我所知,可以在python中使用它们(而不是
希望能提供帮助,谢谢。有控制自动白平衡()和自动曝光()的属性 据我所知,可以在python中使用它们(而不是像链接到的代码中那样使用原始整数值): 但请注意,这并不适用于所有后端,至少GStreamer没有提供控制摄像头参数的方法,而V4L2则取决于摄像头驱动程序 您可以通过在第二个参数处将API传递给构造函数来强制使用它。自己解决它
# -*- 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()
谢谢合作 当然,有时短时间内可能会错过目标。这取决于很多事情。但是你可以保持目标的最后一个坐标直到下一次检测。您好,欢迎来到SO。我不是什么大专家,但你最好打开AWB/AE。你应该阅读更多关于用相机编程拍照的内容。它有很多依赖项,但一般流程是“触发搜索焦点”->“锁定焦点”->“触发搜索曝光”->“锁定曝光”->“触发搜索WB”->“锁定WB”->“拍照”。如果任何一个步骤失败或超时,那么你必须正确处理它。现在还不清楚你到底想做什么:你正在试图关闭自动白平衡和自动曝光吗?如果是这样,那你为什么要把BGR转换成HSV呢?谢谢你的回复。对于anotoine,BGR到HSV更容易找到具有选择色调的颜色。与我的代码基本相同。谢谢,但不幸的是,我尝试了这种方法。您是对的,我的camea(=raspberrypi cam)可能不受cap.set(15,0)/cap.set(16,0)支持,因为它不工作。capset(10,*)工作。
# -*- 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()