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

时间:2014-02-16 11:24:54

标签: 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)

有人知道这个问题吗?

19 个答案:

答案 0 :(得分:172)

imshow()仅适用于waitKey()

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

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

答案 1 :(得分:32)

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

  

如果您运行交互式ipython会话,并且想要使用highgui   windows,先做cv2.startWindowThread()。

     

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

import cv2
img = cv2.imread("image.jpg")
cv2.startWindowThread()
cv2.namedWindow("preview")
cv2.imshow("preview", img)

答案 2 :(得分:19)

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

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

答案 3 :(得分:7)

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

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

pythonw.exe is not responding

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

当我在脚本中使用imshow()并执行它而不是直接在IDLE上运行时,它可以工作。

答案 4 :(得分:6)

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

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

cv2.imshow("img", img); cv2.waitKey(0); cv2.destroyAllWindows()

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

答案 5 :(得分:4)

最后添加cv2.waitKey(0)

答案 6 :(得分:3)

你已经在这个帖子的某个地方得到了所有必要的东西:

if cv2.waitKey(): cv2.destroyAllWindows()

在IDLE中适合我。

答案 7 :(得分:3)

方法1:

以下代码对我有用。 仅添加destroyAllWindows()并不会关闭窗口。最后添加另一个cv2.waitKey(1)完成了该工作。

im = cv2.imread("./input.jpg")
cv2.imshow("image", im)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)

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

初学者注意事项:

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

方法2:

如果要在Jupyter笔记本上显示。

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()

答案 8 :(得分:2)

如果您选择使用“cv2.waitKey(0)”,请确保您已写入“cv2.waitKey(0)”而不是“cv2.waitkey(0)”,因为小写“k”可能会冻结你的节目也是。

答案 9 :(得分:1)

如果你没有使这个工作,你最好把

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

进入一个文件并运行它。

答案 10 :(得分:1)

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

    cv2.waitKey(1)

答案 11 :(得分:1)

waitKey(0)之后不需要任何其他方法(答复上面的代码)

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)
cv2.waitKey(0)

出现窗口->单击窗口并单击Enter。窗口将关闭。

答案 12 :(得分:0)

我也遇到-215错误。我以为imshow是问题所在,但是当我将imread更改为读取不存在的文件时,那里没有任何错误。因此,我将图像文件放在工作文件夹中,并添加了cv2.waitKey(0)并可以正常工作。

答案 13 :(得分:0)

这是我解决的方法:

import cv2
from matplotlib import pyplot
    
img = cv2.imread('path')
pyplot.imshow(img)
pyplot.show()

答案 14 :(得分:0)

这为我解决了,import pyautogui

答案 15 :(得分:0)

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
cv2.destroyAllwindows()

你可以试试这个代码:)

答案 16 :(得分:0)

对于64位系统防止出错,使用此端cv2.waitKey(1)加0xFF。

示例:

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0) & 0xFF 
cv2.destroyAllwindows()

您还可以通过按 Q 按钮停止程序来使用以下命令进行更多控制。

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
if cv2.waitKey(0) & 0xFF == ord('Q'):
    break
cv2.destroyAllwindows()

答案 17 :(得分:-1)

  

错误:( - 1515)size.width> 0&&函数imshow中的size.height> 0

产生此错误是因为找不到图像。所以它不是imshow函数的错误。

答案 18 :(得分:-1)

我也遇到了215错误,我可以通过提供图像的完整路径来解决该错误,例如C:\ Folder1 \ Folder2 \ filename.ext