admin 管理员组文章数量: 1184232
目前正在尝试使用GUI编写代码,该GUI允许切换图像处理。理想情况下,代码将允许打开/关闭窗口视图、实时图像处理(相当基本)和控制外部板。在
我遇到的问题围绕着cv2.imshow()函数。几个月前,我通过从picamera切换到{}来提高处理速度,在这里我可以执行更复杂的计算,比如背景减法,而不必一直调用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上),一些图片显示了错误和预期结果。在
作为参考,这里是关于我的系统的细节
^{pr2}$
代码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(),我可以看到raspberry pi相机和opencv之间的连接是通过bcm2835-v4l2连接工作的。
但是当使用打开cv.imshow()窗口显示黑匣子,不显示任何内容。
更新:所以在测试时,我发现当我执行以下任务时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()没有关联
本文标签: 黑屏 摄像头 python raspberrypi
版权声明:本文标题:python打开摄像头黑屏怎么办_python、cv2.imshow()、raspberryPi和黑屏 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1763706858a3263030.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论