Python 3.7 OpenCV -处理缓慢



我正试图用OpenCV 4.4.0.40拍照,只有在Arduino读取开关按下时才保存它们。

到目前为止,一切正常,但速度很慢,大约需要15秒才能改变Switch值。

Arduino = SerialObject()
if os.path.exists(PathCouleur) and os.path.exists(PathGris):
Images = cv2.VideoCapture(Camera)
Images.set(3, 1920)
Images.set(4, 1080)
Images.set(10, Brightness)
Compte = 0
SwitchNumero = 0
while True:
Sucess, Video = Images.read()
cv2.imshow("Camera", Video)
Video = cv2.resize(Video, (Largeur, Hauteur))
Switch = Arduino.getData()

try:
if Switch[0] == "1":
blur = cv2.Laplacian(Video, cv2.CV_64F).var()
if blur < MinBlur:
cv2.imwrite(PathCouleur + ".png", Video)
cv2.imwrite(PathGris + ".png", cv2.cvtColor(Video, cv2.COLOR_BGR2GRAY))
Compte += 1

except IndexError as err:
pass
if cv2.waitKey(40) == 27:
break
Images.release()
cv2.destroyAllWindows()
else:
print("Erreur, aucun Path")

保存的图像宽度为640,高度为480,showimage为1920x1080,但即使没有showimage,它也很慢。

有人能帮我优化这个代码吗?

我想说这段代码是造成延迟的原因,因为你有两个主要的调用依赖于外部设备来响应(OpenCV调用和Arduino.getData())。

Sucess, Video = Images.read()
cv2.imshow("Camera", Video)
Video = cv2.resize(Video, (Largeur, Hauteur))
Switch = Arduino.getData()

想到的一个解决方案是使用多线程库并将Arduino.getData()调用从主循环周期中分离出来,并在单独的类中使用它在后台运行(您应该在次要线程上使用睡眠,例如50或100ms延迟)。

这样,当Switch事件试图在主循环中读取值时,你应该有一个更好的响应。

cam=cv2.VideoCapture(0,cv2.CAP_DSHOW)

cv2使用。CAP_DSHOW它会改善相机的加载时间,因为它会直接给你视频馈送

相关内容

  • 没有找到相关文章

最新更新