Opencv imshow不会创建窗口

时间:2017-06-17 16:03:50

标签: python opencv raspberry-pi

我最近在Debian OS上使用raspberry pi安装了opencv 2.4.9和python。我写了以下简单的代码来显示图像

import numpy as np
import cv2


print "hello"
cv2.namedWindow("show",0)
print "hello1"
# Load an color image in grayscale
img = cv2.imread('image.jpg',0)

print "hellp"
cv2.imshow("show",img)
cv2.waitKey(100)

cv2.destroyAllWindows()

我正在使用python 2 IDLE。当我运行程序时,只打印你好。也没有创建“显示”窗口。我已经尝试过其他答案,例如“添加waitKey()或创建窗口。但是没有一个在我的情况下工作

我是Raspberry和python的新手。我可以知道上面的代码有什么问题吗? 还有为什么不打印“hello1”?

**编辑*

由于imshow方法不起作用,我尝试了matplotlib。但是,现在窗口框架没有得到更新

import numpy as np
import cv2
from matplotlib import pyplot as plt

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    print "new frame"
    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    #cv2.imwrite("framenew.jpg",frame)

    # Display the resulting frame
    plt.imshow(gray,cmap ='gray')
    plt.show()

    if cv2.waitKey(0) & 0xFF == ord('q'):
       break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

我可以知道如何正确使用这个库

2 个答案:

答案 0 :(得分:3)

您可以将密钥等待时间设置为0waitKey(0)。您的代码waitKey(100)指示OpenCV等待100毫秒然后销毁窗口。如果将waitKey(5000)设置为5秒,它将显示图像5秒钟并将其销毁。

以下是相关的OpenCV Doc

  

函数waitKey无限地等待键事件(何时   延迟< = 0)或延迟毫秒,当它为正时。   由于OS在切换线程之间的时间最短,因此   函数不会等待完全延迟ms,它至少会等待延迟   ms,取决于当时计算机上正在运行的其他内容。   它返回按下的键的代码,如果没有按下键,则返回-1   在指定的时间过去之前。

下面是waitKey()的示例用法,它会在销毁imshow()窗口之前永远等待 Q 被按下。

if cv2.waitKey(0) & 0xFF == ord('q'):
    break

希望得到这个帮助。

答案 1 :(得分:1)

要显示和更新您的OpenCV窗口,只需在更新代码中更改此行:

if cv2.waitKey(1) & 0xFF == ord('q'): break