前提・実現したいこと
C:/Users/abcd/ に入っている breast.jpgというファイルを開きたいです。
import numpy as np
image_path = 'C:/Users/abcd/'
image = cv2.imread(image_path+"breast.jpg")
cv2.imshow("image",image)
これを実行すると以下のエラーメッセージが発生しました。
<ipython-input-4-418f146a80be> in <module>()
4 image = cv2.imread(image_path+"breast.jpg")
5
----> 6 cv2.imshow("image",image)
error: OpenCV(4.0.0) /Users/travis/build/skvark/opencv-python/opencv/modules/highgui/src/window.cpp:350: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'
該当のソースコード
jupyterを使っています。
試したこと
ここで手詰まりになりました
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
パスに日本語が含まれていたりしないですか?
ありがとうございます。パスにはローマ字しか含まれていません。
ファイル名もローマ字にしました。
回答に確認事項を記載したので、確認してください。
ありがとうございます、非常に勉強になりました!
ただ、最終的なところが出来ません。
ディレクトリが存在するかどうかもTrueで、ファイルの読み込みについてもTrueなのですが、やっぱり以下のようなエラーで画像が表示できません。
----> 9 cv2.imshow("image",image)
error: OpenCV(4.0.0) /Users/travis/build/skvark/opencv-python/opencv/modules/highgui/src/window.cpp:350: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'
画像のサイズなどが、適していないのでしょうか。
imshow() の直前で image を print して None または空の配列等になっていないか確認していただけますか?
print(image)
cv2.imshow("image",image)
何か、大量の行列のようなものが出てきました。
[[[38 39 43]
[38 39 43]
[38 39 43]
...,
[38 39 43]
[38 39 43]
[38 39 43]]
配列の中身があるので読み込みはできているようですね。
だとするとそのようなエラーが出るのは謎ですね。
一応動作確認したコードを回答欄に記載したので、コピペしてファイルパスだけ変えて試してみてください。
あと別の画像で試したりしてファイルが問題なのかを調べるといいかもしれないです。
ちなみにエラーは imshow の関数内で
assert size.width>0 && size.height>0 というチェックが False になったことを意味します。(画像の幅、高さが最低でも1以上でなければならない)
print(image.shape) とすると画像の形状が出てきますが、(高さ、幅、3) などとなっているのならば、問題ないはずですが...
Expected cv::UMat for argument 'mat'
一応、このようなエラーが出てきました。
やはり画像がそれに対応していない可能性がありそうだと思いました。
プログラミングの超初心者なのですいません。
そのエラーはどのタイミングで出たのでしょうか?
回答欄に追記したコードを試したら出たということですか?
あとは関係ないかもしれませんが、両方のライブラリを最新にしてみるとか
pip install --upgrade opencv-python
pip install --upgrade numpy
どちらもアップグレードしました。
エラーは先ほど教えていただいたコードを追加した時に出たものです。
先ほど気づいたのですが、実は行列と同時にウィンドウの裏にimgという名前のそれらしいポップアップが出て来ていたみたいです。
ただ、実際の画像とは異なっており、ただの黒い画像でずっと何かを処理しているようにクルクルしています。
image の直前で以下を print として、H と W が1以上の値であること、dtype が uint8 であることを確認してください
print(image.shape) # (H, W, 3)
print(image.dtype) # uint8
cv2.imshow('image', image)
もしそうなっているのに、imshow() ができないのであれば、すいませんがちょっと原因がわからないです。
以下のコードで赤い画像が表示されなければ、imshow() 自体がおかしいです。
import cv2
import numpy as np
img = np.full((500, 500, 3), [0, 0, 255], dtype=np.uint8)
cv2.imshow('image', img)
cv2.waitKey()
ありがとうございます、色々試したところなんとが画像が表示されました!
import cv2
image_path = r"/Users/abcd"
image = cv2.imread(image_path+"/breast.jpg")
cv2.imshow("img",image)
cv2.waitKey()
これでコードが完成しました。
ただ、気がかりなのは、jupyterの処理が一向に終わらず、In[*]の状態で止まってしまいます。
すいません。質問欄をよく読んでいなかったのですが、Jupyter Notebook を使っていたのですか。
Jupyter Notebook で imshow() などの GUI 関係の OpenCV の関数は使えないです。
imshow() 等使いたい場合は、.py ファイルに記載して、python コマンドで実行する必要があります。
Jupyter Notebook 上に表示したい場合は回答に追記したようにしてください。
赤い絵は表示されましたので、imshow自体は問題なさそうです。
ありがとうございます、本当に助かりました。
超初心者なので大変です。また色々勉強していきます。
回答2件
あなたの回答
tips
プレビュー