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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Q&A

解決済

1回答

6605閲覧

jupyterで表示する画像の色が変更されてしまう

chgrios

総合スコア70

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

0グッド

0クリップ

投稿2019/07/11 12:22

jupyter-lab環境で、OpenCVの練習プログラムを書いているのですが、

python

1import cv2 2#カスケードファイルを指定して検出器を作成 3cascade_file = 'haarcascade_frontalface_alt.xml' 4cascade = cv2.CascadeClassifier(cascade_file) 5 6img = cv2.imread('girl.jpg') 7img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) 8 9#顔認識を実行 10face_list = cascade.detectMultiScale(img_gray, minSize=(150,150)) #minsize:顔と認識する領域の最小サイズ 11 12#結果を確認 13# if len(face_list) == 0: 14# print('失敗') 15# quit() 16 17for (x,y,w,h) in face_list: 18 print('顔の座標は',w,y,w,h) 19 red = (0,0,255) 20 cv2.rectangle(img, (x,y), (x+w, y+h),red, thickness = 20) 21 22cv2.imwrite('face-detected.png',img) 23plt.imshow(img) 24# plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY))

このようにグレイスケールで、赤の長方形と指定したにも関わらず、jupyter lab内でインラインで表示される結果が下画像のように青くなってしまいます。
イメージ説明
という表示になってしまいます。保存したファイルを、macのプレビューで確認すると、赤長方形で表示になっていました。
おそらく、jupyter labのスキンを黒に変更したからだと思うのですが、スキンをそのままで、きちんとした色表示にするにはどうしたらいいのでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

OpenCV は画像のチャンネルの順番は BGR として扱うのに対し、matplotlib は RGB として扱うのが原因です。

以下のように imshow に渡す前に cv2.cvtColor() でチャンネル順を BGR から RGB に変更すれば、元の色で表示されます。

diff

1- plt.imshow(img) 2+ plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

イメージ説明

投稿2019/07/11 13:11

編集2019/07/11 13:32
tiitoi

総合スコア21956

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

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

chgrios

2019/07/11 13:24

いえ、imshow()の前にきちんと img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) とグレイスケールに変換する文章を書いています。それと、画像を保存した際にmacのプレビューで見ると正常に表示されていたので、そういう問題ではありません
tiitoi

2019/07/11 13:28 編集

確認ですが、表示したい画像はグレースケール画像の img_gray ではなく、カラー画像の img のほうでよろしかったですか。 そうであれば、回答に書いた通りの問題と思います。 plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) を試して見てください。 第2引数は cv2.COLOR_RGB2GRAY ではなく、cv2.COLOR_BGR2RGB です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問