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

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

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

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

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

Q&A

解決済

1回答

6156閲覧

opencvでの画像読み込みについて

SaitoHiroaki

総合スコア15

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

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

0グッド

0クリップ

投稿2018/11/09 16:01

編集2018/11/09 16:38

前提・実現したいこと

opencvを用いて画像処理をしたいのですが、iPhoneで撮影した画像を読み込むことができません

発生している問題・エラーメッセージ

error: OpenCV(3.4.2) C:\Miniconda3\conda-bld\opencv-suite_1534379934306\work\modules\highgui\src\window.cpp:356: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

該当のソースコード

python3

1import cv2 2img = cv2.imread(r"\Users\HN4-00012\Documents\kosen fike\WE×AR\sample\b\hiroaki.resize(1).jpg") 3cv2.imshow("color",img) 4cv2.waitKey()

試したこと

iPhone以外で撮影した画像はしっかりと読み込めました。

補足情報(FW/ツールのバージョンなど)

イメージ説明
イメージ説明

Windows10

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

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

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

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

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

can110

2018/11/09 16:27

そのJPEGの詳細フォーマットが知りたいところです。とりあえずペイントで開いてそのまま上書き保存したファイルでも読み込めないでしょうか?
guest

回答1

0

ベストアンサー

パスはあってますか?
実行しているのはどのOSでしょうか?
Windows でも Linux でも \ から始まるパスはないと思いますが。


手元の iphone で撮影したところ、iphone の標準カメラの保存形式が HEIF というフォーマットであることに気づきました。

OpenCV はこの形式に対応していないので、cv::imread() で読み込むには以下のどちらかの手順を踏む必要があります。

1 「設定」→「カメラ」→「互換性優先」で保存形式を jpeg に変更し、撮影する。
または
2. HEIF の画像を 変換ツール で jpeg に変換する。

追記

PIL.Image オブジェクトを np.array() にわたすと、そのまま numpy 配列にできます。
OpenCV の Pythonラッパーでは画像の実体は numpy 配列です。

python

1import cv2 2import numpy as np 3from PIL import Image 4 5# PIL で読み込む。 6img = Image.open(r"C:\Users\HN4-00012\Documents\kosen fike\WE×AR\sample\b2\tama.JPG") 7# PIL を numpy 配列に変換 8img = np.array(img) 9 10# PIL はチャンネルの順番が RGB なので、OpenCV の BGR に変換する。 11img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) 12 13cv2.imshow("img", img) 14cv2.waitKey(0)

投稿2018/11/09 16:16

編集2018/11/09 17:26
tiitoi

総合スコア21956

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

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

SaitoHiroaki

2018/11/09 16:22

他の画像ならこのパスで通りました。 Windowsです
can110

2018/11/09 16:26

「\users\user\~」というパスは%SYSTEMDRIVE%(「c:」など)が勝手に補完されて「c:\user\user\~」と解釈されます。 windowsの仕様だったかpython固有の仕様だったかは忘れましたが…
tiitoi

2018/11/09 16:39

> can110 さん そうだったのですね。確かにドライブレター抜きでも読み込めました。 C++ でもそうだったので、Windows の仕様なのかもしれないです。 情報ありがとうございます。
tiitoi

2018/11/09 16:40 編集

> SaitoHiroaki さん 手元の iphone で確認したところ、デフォルトの保存フォーマットは OpenCV は対応していないことがわかったので、追記に記載したどちらかの手順を踏む必要があります。
SaitoHiroaki

2018/11/09 16:44

変換ツールで変換しようしたところ選択できなっかたのでiPhoneの設定を変えてみます。
SaitoHiroaki

2018/11/09 16:53

試しにやってみたところうまくいきませんでした...
tiitoi

2018/11/09 17:01 編集

iPhone7だと互換性優先を設定して撮影したら、読み込めたんですが、iphone X だとまた違うんでしょうかね。 ちなみにWindows のビュアーではその画像は表示できるのでしょうか? Python なら読み込みだけ PIL を使ってみるのもありかと思います。 from PIL import Image img = np.array(Image.open(r'パス')) で imshow() するとどうなりますか? PIL がない場合は pip install pillow で入ります。
SaitoHiroaki

2018/11/09 17:04

Windowsのビュアーでは表示できます。
SaitoHiroaki

2018/11/09 17:10

PILを使用してみました。 Windowsのフォトの方で表示できました。 opencvを使用して顔検出をしたかったねですが、厳しいですかね?
tiitoi

2018/11/09 17:12

PIL では読み込めたのですか?
SaitoHiroaki

2018/11/09 17:14

PILでは読み込めました。
tiitoi

2018/11/09 17:16

読み込めたのであれば、 img = np.array(Image.open(r'パス')) # PIL はチャンネルの順番が RGB なので、OpenCV の BGR に変換する。 img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) とすれば、あとは imread() で読み込んだ場合と同じように OpenCV の関数で使えます。
SaitoHiroaki

2018/11/09 17:22

import cv2 import numpy as np from PIL import Image img = np.array(Image.open(r"C:\Users\HN4-00012\Documents\kosen fike\WE×AR\sample\b2\tama.JPG")) img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR) img = cv2.imread(r"C:\Users\HN4-00012\Documents\kosen fike\WE×AR\sample\b2\tama.JPG") print(img) このような感じでしょうか?
tiitoi

2018/11/09 17:26

追記しました。 そのやり方で合っていますが、最後の imread() は不要です。
SaitoHiroaki

2018/11/09 17:29

表示されました!!!! ありがとうございます!!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問