sco*_*ang 20 python ubuntu opencv jupyter-notebook
我在谷歌或stackoverflow上检查其他问题,他们正在谈论在脚本中运行cv2.imshow,但我的代码在jupyter笔记本中运行.
这是我的配置:
ubuntu 16.4x64
python 3.5
opencv 3.1.0
我启动了一个jupyter笔记本:这是我把它放在笔记本上的代码:
%pylab notebook
import cv2
cvim2disp = cv2.imread('data/home.jpg')
cv2.imshow('HelloWorld', cvim2disp)
cv2.waitKey() #image will not show until this is called
cv2.destroyWindow('HelloWorld') #make sure window closes cleanly
Run Code Online (Sandbox Code Playgroud)
当我执行这些代码.图像将显示在弹出窗口中,但是我无法通过单击右上角的x关闭此窗口,片刻之后,系统会提示我窗口没有响应,它会给我2个选择:等待","退出".如果我点击等待,那么它将在稍后显示相同的提示,如果我点击'fore quit',那么jupyter笔记本内核会死掉,我必须重新开始.
我谷歌周围,许多解决方案建议我应该添加此代码
cv2.startWindowThread()
Run Code Online (Sandbox Code Playgroud)
之前imshow,但情况变得更糟,内核永远挂起!任何人都知道发生了什么.
小智 16
%matplotlib inline
#The line above is necesary to show Matplotlib's plots inside a Jupyter Notebook
import cv2
from matplotlib import pyplot as plt
#Import image
image = cv2.imread("input_path")
#Show the image with matplotlib
plt.imshow(image)
plt.show()
Run Code Online (Sandbox Code Playgroud)
Sai*_*bot 11
cv2.waitKey()的API 文档指出以下内容:
此函数是 HighGUI 中唯一可以获取和处理事件的方法,因此需要定期调用它以进行正常的事件处理,除非在负责事件处理的环境中使用 HighGUI。
那么也许在无限循环中调用该函数会使窗口响应?我还没有测试过这个,但也许你想尝试以下方法:
import cv2
cvim2disp = cv2.imread('data/home.jpg')
cv2.imshow('img', cvim2disp)
while(True):
k = cv2.waitKey(33)
if k == -1: # if no key was pressed, -1 is returned
continue
else:
break
cv2.destroyWindow('img')
Run Code Online (Sandbox Code Playgroud)
我遇到了类似的问题,无法cv2.imshow()在Jupyter Notebook中找到好的解决方案。我遵循了这个stackoverflow答案,仅使用matplotlib显示图像。
import matplotlib.pyplot as plt
# load image using cv2....and do processing.
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
# as opencv loads in BGR format by default, we want to show it in RGB.
plt.show()
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您在 google collab 中遇到问题,您可以使用此补丁
from google.colab.patches import cv2_imshow
cv2_imshow(img)
Run Code Online (Sandbox Code Playgroud)
小智 5
很简单。您需要了解正在发生的事情。
import cv2
cvim2disp = cv2.imread('data/home.jpg')
cv2.imshow('HelloWorld', cvim2disp)
cv2.waitKey(0)
cv2.destroyWindow('HelloWorld')
Run Code Online (Sandbox Code Playgroud)
waitKey(0)方法正在无限等待输入。当您看到相应图像的框架时,请勿尝试使用右上角的关闭来关闭图像。
而是按一些键。waitkey方法会将其作为输入,并将返回一个值。此外,您还可以检查按下了哪个键来关闭框架。
此外,waitKey(33)该框架将保持活动状态33 ms,然后自动将其关闭。
destroyWindow()如果存在,将破坏当前帧。
destroyAllWindows()将破坏当前存在的所有帧。
这将解决。
| 归档时间: |
|
| 查看次数: |
20391 次 |
| 最近记录: |