gpt4 book ai didi

python、cv2.imshow()、raspberryPi 和黑屏

转载 作者:行者123 更新时间:2023-11-28 19:01:13 26 4
gpt4 key购买 nike

目前正在尝试使用 GUI 编写代码,以允许打开/关闭图像处理。理想情况下,代码将允许打开/关闭窗口 View 、实时图像处理(非常基本)和控制外部板。

我遇到的问题与 cv2.imshow() 函数有关。几个月前,我通过从 picamera 切换到 cv2 来提高处理速度,这样我就可以执行更复杂的计算,比如背景减法,而不必一直调用 python .使用 bcm2835-v4l2 包,我能够使用 cv2 直接从 picamera 中提取图像。

快进 6 个月,在尝试更新代码时,我发现函数 cv2.imshow() 不再正确显示。我认为这可能是 bcm2835-v4l2 的问题,但使用 matplotlib 进行的测试表明连接正常。我猜它似乎与 cv2.imshow() 有关。

我实际上正在使用 threading 模块创建一个单独的线程来捕获图像,我想知道这是否是罪魁祸首。我不这么认为,尽管输入命令

import cv2
camera = cv2.VideoCapture(0)
grabbed,frame = camera.read()
cv2.imshow(frame)

产生相同的黑屏

下面是我正在使用的代码(在 RPi3 上),一些图像显示错误和预期结果。

至于引用这里是关于我的系统的详细信息

Raspberry pi3
raspi stretch
python 3.5.1
opencv 3.4.1

代码

import cv2
from threading import Thread
import time
import numpy as np
from tkinter import Button, Label, mainloop, Tk, RIGHT

class GPIOControllersystem:
def __init__(self,OutPinOne=22, OutPinTwo=27,Objsize=30,src=0):
self.Objectsize = Objsize

# Build GUI controller
self.TK = Tk() # Place TK GUI class into self

# Variables
self.STSP = 0
self.ShutdownVar = 0
self.Abut = []
self.Bbut = []
self.Cbut = []
self.Dbut = []

# setup pi camera for aquisition
self.resolution = (640,480)
self.framerate = 60

# Video capture parameters
(w,h) = self.resolution
self.bytesPerFrame = w * h

self.Camera = cv2.VideoCapture(src)
self.fgbg = cv2.createBackgroundSubtractorMOG2()

def Testpins(self):
while True:
grabbed,frame = self.Camera.read()
frame = self.fgbg.apply(frame)

if self.ShutdownVar ==1:
break
if self.STSP == 1:
pic1, pic2 = map(np.copy,(frame,frame))
pic1[pic1 > 126] = 255
pic2[pic2 <250] = 0
frame = pic1
elif self.STSP ==1:
time.sleep(1)
cv2.imshow("Window",frame)
cv2.destroyAllWindows()

def MProcessing(self):
Thread(target=self.Testpins,args=()).start()
return self

def BuildGUI(self):
self.Abut = Button(self.TK,text = "Start/Stop System",command = self.CallbackSTSP)
self.Bbut = Button(self.TK,text = "Change Pump Speed",command = self.CallbackShutdown)
self.Cbut = Button(self.TK,text = "Shutdown System",command = self.callbackPumpSpeed)
self.Dbut = Button(self.TK,text = "Start System",command = self.MProcessing)

self.Abut.pack(padx=5,pady=10,side=RIGHT)
self.Bbut.pack(padx=5,pady=10,side=RIGHT)
self.Cbut.pack(padx=5,pady=10,side=RIGHT)
self.Dbut.pack(padx=5,pady=10,side=RIGHT)
Label(self.TK, text="Controller").pack(padx=5, pady=10, side=RIGHT)
mainloop()

def CallbackSTSP(self):
if self.STSP == 1:
self.STSP = 0
print("stop")
elif self.STSP == 0:
self.STSP = 1
print("start")

def CallbackShutdown(self):
self.ShutdownVar = 1

def callbackPumpSpeed(self):
pass

if __name__ == "__main__":
GPIOControllersystem().BuildGUI()

使用 matplotlib.pyplot.imshow(),我可以看到树莓派相机和 opencv 之间的连接正在通过 bcm2835-v4l2 连接工作。 Image of frame captured using system but plotting with matplotlib

但是,当使用 opencv.imshow() 时,窗口会变成黑框,什么也不会显示。 enter image description here

更新:所以在测试时我发现当我执行以下任务时

import cv2
import matplotlib

camera = cv2.VideoCapture(0)
grab,frame = camera.read()
matplotlib.pyplot.imshow(frame)

grab,frame = camera.read()
matplotlib.pyplot.imshow(frame)

更新已解决,与主要问题无关。这是一个缓冲问题。似乎与 cv2.imshow() 无关

最佳答案

在你应该使用的覆盆子上 从 picamera 导入 PiCamera结帐pyimagesearch为此

关于python、cv2.imshow()、raspberryPi 和黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52438662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com