繁体   English   中英

cv2.imshow() 在 Mac 上崩溃

[英]cv2.imshow() crashes on Mac

当我在ipython (MacOS /python 2.7.13)上运行这段代码时

cv2.startWindowThread()
cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()

kernel 崩溃。 当图像出现时,我唯一可以按下的按钮是minimise (中间的那个,当我按下任意键时,纺车就会出现,我唯一能做的就是强行退出。

PS 我已经通过home-brew下载了最新的 python 版本。

你只是想看看图像吗? 我不确定你想用 startWindowThread 做什么,但如果你想以最简单的方式安装 opencv,打开图像并查看它,试试这个:

安装conda (比 homebrew 更好的 opencv 包管理器)

然后创建一个cv环境:

conda create -n cv

激活它并从 menpo 的频道安装 opencv

source activate cv
conda install -c menpo opencv

然后在python中(点击q退出):

import cv2
cv2.namedWindow('imageWindow')
img = cv2.imread('path/to/your/image.png')
cv2.imshow('imageWindow',img)
wait = True
while wait:
  wait = cv2.waitKey()=='q113' # hit q to exit

我已经重现了 jupyter 内核崩溃问题。 下面是测试环境设置。

 - macOS 10.12.16
 - python 2.7.11
 - opencv 4.0.0
 - ipython 5.8.0
 - jupyter notebook server 5.7.4

随着cv2.waitKey()更改为等待Q按下,问题就消失了。

这是代码:

import cv2

img = cv2.imread('sample.jpg')
cv2.startWindowThread()
cv2.imshow('img', img)

# wait forever, if Q is pressed then close cv image window
if cv2.waitKey(0) & 0xFF == ord('q'):
   cv2.destroyAllWindows()

希望这有帮助。

有同样的问题,我发现没有解决方案对我有用。 我只能通过从google colab tools复制这个函数来解决它。 它不会在新窗口中显示图像,而是在 Jupyter 笔记本中内嵌。

import cv2
from IPython import display
from PIL import Image

def cv2_imshow(a):
    """A replacement for cv2.imshow() for use in Jupyter notebooks.
    Args:
    a : np.ndarray. shape (N, M) or (N, M, 1) is an NxM grayscale image. shape
      (N, M, 3) is an NxM BGR color image. shape (N, M, 4) is an NxM BGRA color
      image.
    """
    a = a.clip(0, 255).astype('uint8')
    # cv2 stores colors as BGR; convert to RGB
    if a.ndim == 3:
        if a.shape[2] == 4:
            a = cv2.cvtColor(a, cv2.COLOR_BGRA2RGBA)
        else:
            a = cv2.cvtColor(a, cv2.COLOR_BGR2RGB)
    display.display(Image.fromarray(a))

我在 Mac OS X 10.14.3 上有最新版本的 python (2.7.15)。

为什么我们不能将内容保存到文件中并使用命令python filename.py运行它。 尽管如此,它仍然是相同的,并且有效!!

我测试的示例代码是:

import cv2

img = cv2.imread('sample.jpg')

cv2.startWindowThread()
cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()

希望有帮助!

这对我有用。 window被关闭,程序可以继续。 美中不足的是window图标还在dock中。

while cv2.waitKey(100) != 27:# loop if not get ESC
    cv2.imshow("Window_Name", Your_Image)

cv2.destroyAllWindows()
cv2.waitKey(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM