我最近在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()
我可以知道如何正确使用这个库
答案 0 :(得分:3)
您可以将密钥等待时间设置为0
秒waitKey(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