我在Kubuntu 20.04上使用Python3.8.2。
cv2是最新的可用版本,NumPy和pip也是如此:
Requirement already up-to-date: pip in /usr/local/lib/python3.8/dist-packages (20.1.1)
Requirement already up-to-date: opencv-contrib-python in /usr/local/lib/python3.8/dist-packages (4.3.0.36)
Requirement already satisfied, skipping upgrade: numpy>=1.17.3 in /usr/local/lib/python3.8/dist-packages (from opencv-contrib-python) (1.19.1)
Requirement already up-to-date: numpy in /usr/local/lib/python3.8/dist-packages (1.19.1)这是我的代码:
import numpy as np
import cv2
black_image = np.zeros((480, 640, 3))
cv2.imshow("Test", black_image)
cv2.waitKey()
white_image = np.ones((480, 640, 3))
cv2.imshow("Test", white_image)
cv2.waitKey()这个简单的测试程序,在空闲运行时,有时会显示一个小的黑色映像(95x25),而不是我传递给imshow的640x480黑色映像。其他时候,它会显示正确的图像。在这两种情况下,当这个窗口关闭时,OpenCV将永远阻塞,而不是显示第二个图像,我必须通过空闲的shell窗口关闭进程。
当在终端中运行时,结果是一样的:有时,大小为95x25的奇怪的小映像在打开第二个窗口之前会阻塞,导致我不得不终止进程(Ctrl+C什么也不做,发送SIGTERM也不能工作)。
我试过:
向cv2.imshow()传递0。同样的结果。
传递1到cv2.imshow()。这实际上显示白色图像,但黑色图像(或其怪异的95x25替代品)也会显示出来。据我所知,如果使用相同的名称,cv2.imshow()应该替换已经打开的窗口的内容。
我记得OpenCV在Python3.7和更低版本中工作得很好,尽管我不能用它进行测试,因为这些版本不再可以在我的Ubuntu版本上安装。
这两种结果在我的机器上都是可复制的,但在它们之间切换不需要任何代码更改。这是怎么回事,我该怎么解决?
编辑:还尝试关闭窗口(通过名称和通过cv2.destroyAllWindows())并等待特定的按键。主要问题仍然存在:图像显示不一致,OpenCV有时会永远挂起。普通程序和我粘贴的其他代码不能正常工作。
编辑2:现在附上的是我问题的截图。
第一个奇怪的窗口:

关闭第一个窗口后没有打开OpenCV窗口的空闲挂起:

Konsole (我的终端仿真器)也在关闭第一个窗口后挂起:

Ctrl没有在终端中结束Python:

我也可以提供视频证明,如果需要。
发布于 2020-07-26 21:03:48
我认为你面临两个问题:
2的问题是,cv2.imshow接受(默认情况下)关闭窗口的关键事件(即通过x标志关闭窗口将导致永远停留在等待步骤中)。
作为解决这一问题的方法,您可以添加一个if语句来关闭窗口,如果按下了键,就可以显式地告诉程序,如果按下x符号/按钮就关闭窗口。因此,您可以编写如下内容:
import numpy as np
import cv2
black_image = np.zeros((480, 640, 3))
white_image = np.ones((480, 640, 3))
images = [black_image, white_image]
for image in images:
while True:
cv2.imshow('Frame', image)
if cv2.waitKey(1) & 0xFF == 27 or cv2.getWindowProperty("Frame", 0) == -1: # "0xFF == 27" for Esc-key in Windows
break
cv2.destroyAllWindows()https://stackoverflow.com/questions/63104705
复制相似问题