cv2.imshow命令在opencv-python中无法正常工作

top*_*eng 91 python opencv image-processing

我正在使用opencv 2.4.2,python 2.7以下简单代码创建了一个正确名称的窗口,但其内容只是空白而不显示图像:

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)
Run Code Online (Sandbox Code Playgroud)

有谁知道这个问题?

ber*_*rak 193

imshow()仅适用于waitKey():

import cv2
img = cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow', img)
cv2.waitKey()
Run Code Online (Sandbox Code Playgroud)

(更新窗口所需的整个消息循环都隐藏在那里.)

  • 为了后人的清楚,在正常情况下,这将是正确的答案.省略waitKey(通常)会导致问题中描述的行为. (5认同)
  • check`print img`打印一个正确的numpy数组,而不是`NoneType`对象. (3认同)

Akh*_*rus 39

我在这里找到了适合我的答案:http: //txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

如果您运行交互式ipython会话,并且想要使用highgui窗口,请首先执行cv2.startWindowThread().

详细说明:HighGUI是一个简化的界面,用于显示OpenCV代码中的图像和视频.它应该像以下一样简单:

import cv2
img = cv2.imread("image.jpg")
cv2.startWindowThread()
cv2.namedWindow("preview")
cv2.imshow("preview", img)
Run Code Online (Sandbox Code Playgroud)

  • 你可以通过cv2.destroyAllWindows()关闭它 (4认同)

Adi*_*ala 21

你必须使用cv2.waitKey(0)之后cv2.imshow("window",img).只有这样才能奏效.

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)


小智 8

这就是我解决它的方法:

import cv2
from matplotlib import pyplot
    
img = cv2.imread('path')
pyplot.imshow(img)
pyplot.show()
Run Code Online (Sandbox Code Playgroud)


rkd*_*ari 7

我遇到了同样的问题.我试图从IDLE读取图像并尝试使用它来显示它cv2.imshow(),但是pythonw.exe当试图关闭窗口时,显示窗口冻结并且显示没有响应.

下面的帖子给出了为什么会发生这种情况的可能解释

pythonw.exe没有响应

" 基本上,不要从IDLE执行此操作.编写脚本并在shell中直接运行它,如果在Windows中,通过使用.pyw扩展名命名并双击它.在IDLE自己的事件之间显然存在冲突循环和GUI工具包中的循环. "

当我imshow()在脚本中使用并执行它而不是直接在IDLE上运行时,它起作用了.


Pyg*_*irl 7

最后添加cv2.waitKey(0)


Dha*_*rma 6

如果您在Python控制台中运行,请执行以下操作:

img = cv2.imread("yourimage.jpg")

cv2.imshow("img", img); cv2.waitKey(0); cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

然后,如果您按Enter图像,它将成功关闭图像,您可以继续运行其他命令。


blu*_*con 6

方法一:

以下代码对我有用。只是添加 destroyAllWindows() 并没有关闭窗口。最后添加另一个 cv2.waitKey(1) 完成了这项工作。

im = cv2.imread("./input.jpg")
cv2.imshow("image", im)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)
Run Code Online (Sandbox Code Playgroud)

信用:https : //stackoverflow.com/a/50091712/8109630

初学者注意事项:

  • 这将在单独的窗口中打开图像,而不是在笔记本上内嵌显示。这就是我们稍后必须使用 destroyAllWindows() 关闭它的原因。
  • 因此,如果您没有看到一个单独的窗口弹出,请检查它是否在您当前窗口的后面。
  • 查看图像后,按一个键关闭弹出的窗口。

方法二:

如果要显示在 Jupyter notebook 上。

from matplotlib import pyplot as plt
import cv2

im = cv2.imread("./input.jpg")
color = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
plt.imshow(color)
plt.title('Image')
plt.show()
Run Code Online (Sandbox Code Playgroud)


小智 5

对我来说,数字大于 0 的 waitKey() 有效

    cv2.waitKey(1)
Run Code Online (Sandbox Code Playgroud)