質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

5708閲覧

imshowの画像表示について

harada123

総合スコア19

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/02/16 10:30

編集2019/02/16 10:38

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2019/02/16 10:44

パスに日本語が含まれていたりしないですか?
harada123

2019/02/16 10:50 編集

ありがとうございます。パスにはローマ字しか含まれていません。 ファイル名もローマ字にしました。
tiitoi

2019/02/16 11:14

回答に確認事項を記載したので、確認してください。
harada123

2019/02/16 12:35

ありがとうございます、非常に勉強になりました! ただ、最終的なところが出来ません。 ディレクトリが存在するかどうかも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' 画像のサイズなどが、適していないのでしょうか。
tiitoi

2019/02/16 12:48 編集

imshow() の直前で image を print して None または空の配列等になっていないか確認していただけますか? print(image) cv2.imshow("image",image)
harada123

2019/02/16 12:50

何か、大量の行列のようなものが出てきました。 [[[38 39 43] [38 39 43] [38 39 43] ..., [38 39 43] [38 39 43] [38 39 43]]
tiitoi

2019/02/16 12:59

配列の中身があるので読み込みはできているようですね。 だとするとそのようなエラーが出るのは謎ですね。 一応動作確認したコードを回答欄に記載したので、コピペしてファイルパスだけ変えて試してみてください。 あと別の画像で試したりしてファイルが問題なのかを調べるといいかもしれないです。
tiitoi

2019/02/16 13:00

ちなみにエラーは imshow の関数内で assert size.width>0 && size.height>0 というチェックが False になったことを意味します。(画像の幅、高さが最低でも1以上でなければならない) print(image.shape) とすると画像の形状が出てきますが、(高さ、幅、3) などとなっているのならば、問題ないはずですが...
harada123

2019/02/16 13:01

Expected cv::UMat for argument 'mat' 一応、このようなエラーが出てきました。 やはり画像がそれに対応していない可能性がありそうだと思いました。 プログラミングの超初心者なのですいません。
tiitoi

2019/02/16 13:05

そのエラーはどのタイミングで出たのでしょうか? 回答欄に追記したコードを試したら出たということですか?
tiitoi

2019/02/16 13:06

あとは関係ないかもしれませんが、両方のライブラリを最新にしてみるとか pip install --upgrade opencv-python pip install --upgrade numpy
harada123

2019/02/16 13:12

どちらもアップグレードしました。 エラーは先ほど教えていただいたコードを追加した時に出たものです。 先ほど気づいたのですが、実は行列と同時にウィンドウの裏にimgという名前のそれらしいポップアップが出て来ていたみたいです。 ただ、実際の画像とは異なっており、ただの黒い画像でずっと何かを処理しているようにクルクルしています。
tiitoi

2019/02/16 13:20

image の直前で以下を print として、H と W が1以上の値であること、dtype が uint8 であることを確認してください print(image.shape) # (H, W, 3) print(image.dtype) # uint8 cv2.imshow('image', image) もしそうなっているのに、imshow() ができないのであれば、すいませんがちょっと原因がわからないです。
tiitoi

2019/02/16 13:22

以下のコードで赤い画像が表示されなければ、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()
harada123

2019/02/16 13:26

ありがとうございます、色々試したところなんとが画像が表示されました! import cv2 image_path = r"/Users/abcd" image = cv2.imread(image_path+"/breast.jpg") cv2.imshow("img",image) cv2.waitKey() これでコードが完成しました。 ただ、気がかりなのは、jupyterの処理が一向に終わらず、In[*]の状態で止まってしまいます。
tiitoi

2019/02/16 13:33 編集

すいません。質問欄をよく読んでいなかったのですが、Jupyter Notebook を使っていたのですか。 Jupyter Notebook で imshow() などの GUI 関係の OpenCV の関数は使えないです。 imshow() 等使いたい場合は、.py ファイルに記載して、python コマンドで実行する必要があります。 Jupyter Notebook 上に表示したい場合は回答に追記したようにしてください。
harada123

2019/02/16 13:34

赤い絵は表示されましたので、imshow自体は問題なさそうです。 ありがとうございます、本当に助かりました。 超初心者なので大変です。また色々勉強していきます。
guest

回答2

0

ベストアンサー

1. ファイルが存在するか確認する。

python

1import os 2print(os.path.exists(path))

1 False (ファイルが存在しない) の場合

1.1 セパレータにバックスラッシュ (円マーク) を使う場合

ファイルのセパレータにバックスラッシュを使う場合、エスケープしているか

NG: path = 'C:\Users\myname\Desktop' OK: path = 'C:\Users\myname\Desktop' # エスケープしている OK: path = r'C:\Users\myname\Desktop' # raw 文字列

1.2 そもそもパスが間違っていないか

  • スペルミス
  • 相対パスの場合、カレントディレクトリを基点として指定するので、勘違いしていないかどうか
import os print(os.getcwd())

1.3 パスの結合時のミス

# NG: dirpath = 'myname/Desktop' filename = 'test.jpg' path = dirpath + filename print(path) # /myname/Desktoptest.jpg # os.path.join() を使うと安全にパスを結合できる。 path = os.path.join(dirpath, filename) print(path) # /myname/Desktop/test.jpg

2 True (ファイルが存在する) の場合

2.1 2バイト文字 (日本語) がパスに含まれていないかどうか
→ OpenCV で2バイト文字は使えない

2.2 ファイルの読み込みに失敗

cv2.imread() を使うときは返り値が None になっていないか (読み込みに失敗していなか) を必ず確認してください。

python

1img = cv2.imread(path) 2if img is None: 3 print('Failed to load image.')

追記 (動作確認したコード)

python

1import cv2 2 3img = cv2.imread(r'C:\Users\myname\Desktop\test.jpg') 4 5cv2.imshow('image', img) 6cv2.waitKey()

Jupyter Notebook で表示する場合

python

1import cv2 2from IPython.display import Image, display 3 4def imshow(img): 5 img = cv2.imencode('.png', img)[1] 6 display(Image(img)) 7 8img = cv2.imread('test.jpg') 9imshow(img)

投稿2019/02/16 11:13

編集2019/02/16 13:33
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

解決いたしました。
ありがとうございます。

投稿2019/02/19 06:15

harada123

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問