このコードをipython (MacOS /python 2.7.13)
で実行しているとき
cv2.startWindowThread()
cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()
カーネルがクラッシュします。画像が表示されたら、押すことができるボタンはminimise
だけです(真ん中のボタンで、任意のキーを押すと、スピニングホイールが表示され、強制終了するだけです。
P.S. home-brew
から最新のpythonバージョンをダウンロードしました。
画像を見たいだけですか? 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
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 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()
それが役に立てば幸い!