web-dev-qa-db-ja.com

Macでcv2.imshow()がクラッシュする

このコードをipython (MacOS /python 2.7.13)で実行しているとき

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

カーネルがクラッシュします。画像が表示されたら、押すことができるボタンはminimiseだけです(真ん中のボタンで、任意のキーを押すと、スピニングホイールが表示され、強制終了するだけです。

P.S. home-brewから最新のpythonバージョンをダウンロードしました。

9
thanasissdr

画像を見たいだけですか? 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
4
pale bone

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()
_

この助けを願っています。

2
thewaywewere

同じ問題があり、私が見つけた解決策は私のために働いていませんでした。この関数を 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))
1

Mac OS X10.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()

それが役に立てば幸い!

0