【问题标题】:cv2.imshow() crashes on Maccv2.imshow() 在 Mac 上崩溃
【发布时间】:2018-03-03 02:29:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • OpenCV gui 不能很好地与 jupyter/iPython 配合使用。为什么不使用像 pyCharm 这样的本地 IDE?

标签: python macos opencv ipython cv2


【解决方案1】:

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

安装conda(比自制软件更好的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

【讨论】:

    【解决方案2】:

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

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

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

      希望对你有帮助!

      【讨论】:

        【解决方案4】:

        遇到了同样的问题,但没有找到适合我的解决方案。我只能通过从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))
        

        【讨论】:

          猜你喜欢
          • 2017-10-12
          • 2020-05-25
          • 1970-01-01
          • 2018-05-17
          • 1970-01-01
          • 2023-03-21
          • 2022-01-18
          • 2019-03-27
          • 2021-04-25
          相关资源
          最近更新 更多