opencv cv2.imshow()在Mac上崩溃

xe55xuns  于 2022-11-24  发布在  Mac
关注(0)|答案(5)|浏览(294)

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

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

内核崩溃。当图像出现时,我唯一可以按下的按钮是minimise(中间的那个,当我按下任何键时,旋转轮就会显示出来,我唯一能做的就是强制退出。
我已经通过home-brew下载了最新的python版本。

5ssjco0h

5ssjco0h1#

您是否只想查看映像?我不确定您想使用startWindowThread执行什么操作,但是如果您想以最简单的方式安装opencv,请打开映像并查看它,尝试以下操作:
install 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
bbuxkriu

bbuxkriu2#

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

希望这能有所帮助。

pu82cl6c

pu82cl6c3#

有同样的问题,我发现没有解决办法为我工作。我能够解决它,只有从谷歌colab工具复制这个功能。它不显示图像在一个新的窗口,但内联在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))
klsxnrf1

klsxnrf14#

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

希望能有所帮助!

huwehgph

huwehgph5#

这对我来说很有效。窗口关闭了,程序可以继续。美中不足的是窗口图标仍然在停靠栏中。

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

cv2.destroyAllWindows()
cv2.waitKey(1)

相关问题