9

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

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

内核崩溃。当图像出现时,我唯一可以按下的按钮是minimise(中间的那个,当我按下任何键时,旋转轮就会出现,我唯一能做的就是强制退出。

PS 我已经通过home-brew.

4

4 回答 4

5

你只是想看图像吗?我不确定你想用 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
于 2017-09-21T22:43:25.950 回答
3

我已经重现了 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()

希望这有帮助。

于 2019-02-13T19:30:18.090 回答
2

有同样的问题,但没有找到适合我的解决方案。我只能通过从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))
于 2020-03-13T18:05:15.927 回答
1

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

希望能帮助到你!

于 2019-02-14T12:19:07.700 回答