Python 覆盆子&x2B;OpenCV:picamera.exc.PiCameraValueError:分辨率为640x480的缓冲区长度不正确

Python 覆盆子&x2B;OpenCV:picamera.exc.PiCameraValueError:分辨率为640x480的缓冲区长度不正确,python,Python,我不想用我的覆盆子相机来探测矩形 Raspberry Pi 3 B型及1.3版 Raspian Buster(2019-09-26-raspbian-Buster-full\u mit\u Settings\u und\u Updates.img) OpenCV:4.2.0(按照本说明安装,不在虚拟环境中,而是直接安装:) 虽然我已经测试了我在www中发现的所有问题以解决该问题,但我发现以下错误: python3.7.3(/usr/bin/python3) >>>%Run kk3neu_stac

我不想用我的覆盆子相机来探测矩形

Raspberry Pi 3 B型及1.3版

Raspian Buster(2019-09-26-raspbian-Buster-full\u mit\u Settings\u und\u Updates.img)

OpenCV:4.2.0(按照本说明安装,不在虚拟环境中,而是直接安装:)

虽然我已经测试了我在www中发现的所有问题以解决该问题,但我发现以下错误:

python3.7.3(/usr/bin/python3)
>>>%Run kk3neu_stackoverflow.py
回溯(最近一次呼叫最后一次):
文件“/home/pi/kkk3neu_stackoverflow.py”,第19行,在
对于照相机中的帧。连续捕获(rawCapture,format=“bgr”,使用\u video\u port=True):
文件“/usr/local/lib/python3.7/dist packages/picamera/camera.py”,第1702行,连续捕获
如果不是编码器,请等待(self.CAPTURE\u超时):
文件“/usr/local/lib/python3.7/dist packages/picamera/encoders.py”,第395行,正在等待
self.stop()
文件“/usr/local/lib/python3.7/dist packages/picamera/encoders.py”,第419行,在stop中
self.\u close\u output()
文件“/usr/local/lib/python3.7/dist-packages/picamera/encoders.py”,第349行,输入关闭
mo.close_流(输出,打开)
文件“/usr/local/lib/python3.7/dist packages/picamera/mmalobj.py”,第371行,在close_流中
stream.flush()
文件“/usr/local/lib/python3.7/dist packages/picamera/array.py”,第238行,刷新
self.array=bytes_to_rgb(self.getvalue()、self.size或self.camera.resolution)
文件“/usr/local/lib/python3.7/dist packages/picamera/array.py”,第127行,以字节为单位
'分辨率%dx%d'(宽度、高度)的缓冲区长度不正确'
picamera.exc.PiCameraValueError:分辨率640x480的缓冲区长度不正确
>>> 
如果有人能帮助我,我将不胜感激。
非常感谢

您需要清除捕获之间的数据流。PiRGBArray文档介绍了如何使用truncate函数执行此操作,请参见谢谢!与此同时,我已经找到了解决办法。1) 我在最后3行中做了缩进错误。我从最后3行中删除了每行一个缩进。然后缓冲区错误不再出现。2) 但是直肠的检测不起作用。问题是“minNeighbors=20”。我将其更改为“minNeighbors=1”,因为从那时起,可以识别RECT。所以我的问题解决了。非常感谢你。
import time
import cv2
from picamera.array import PiRGBArray
from picamera import PiCamera
detector = cv2.CascadeClassifier('/home/pi/opencv/data/haarcascades/haarcascade_frontalcatface_extended.xml')
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
camera.rotation = 180
rawCapture = PiRGBArray(camera, size = (640, 480))
time.sleep(0.1)
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
    image = frame.array
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    rects = detector.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=20, minSize=(75, 75))
    for (i, (x, y, w, h)) in enumerate(rects):
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
        cv2.putText(image, "Object {}".format(i + 1), (x, y - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.55, (0, 0, 255), 2)
        cv2.imshow("Object Detector", image)
        cv2.waitKey(1)
        rawCapture.truncate(0)
Python 3.7.3 (/usr/bin/python3)
>>> %Run kk3neu_stackoverflow.py
Traceback (most recent call last):
  File "/home/pi/kk3neu_stackoverflow.py", line 19, in <module>
    for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
  File "/usr/local/lib/python3.7/dist-packages/picamera/camera.py", line 1702, in capture_continuous
    if not encoder.wait(self.CAPTURE_TIMEOUT):
  File "/usr/local/lib/python3.7/dist-packages/picamera/encoders.py", line 395, in wait
    self.stop()
  File "/usr/local/lib/python3.7/dist-packages/picamera/encoders.py", line 419, in stop
    self._close_output()
  File "/usr/local/lib/python3.7/dist-packages/picamera/encoders.py", line 349, in _close_output
    mo.close_stream(output, opened)
  File "/usr/local/lib/python3.7/dist-packages/picamera/mmalobj.py", line 371, in close_stream
    stream.flush()
  File "/usr/local/lib/python3.7/dist-packages/picamera/array.py", line 238, in flush
    self.array = bytes_to_rgb(self.getvalue(), self.size or self.camera.resolution)
  File "/usr/local/lib/python3.7/dist-packages/picamera/array.py", line 127, in bytes_to_rgb
    'Incorrect buffer length for resolution %dx%d' % (width, height))
picamera.exc.PiCameraValueError: Incorrect buffer length for resolution 640x480
>>>