2016-10-06 16 views
0

私はOpenCVとPythonから始めています。私はそれをインストールして、単純なスクリプトで使い始めました。私はB/Wでカラーと同じイメージでイメージをロードしたい。これは、単にコードです:OpenCV(Python)による画像の読み込みが間違っています

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 

img1 = cv2.imread("tiger.jpg",3) 
img2 = cv2.imread("tiger.jpg",0) 

plt.subplot(121),plt.imshow(img1),plt.title('TIGER_COLOR') 
plt.subplot(122),plt.imshow(img2),plt.title('TIGER_BW') 

plt.show() 

[OK]を、これは私がその本当の色を使用していた画像です:https://pixabay.com/en/tiger-cub-tiger-cub-big-cat-feline-165189/。 問題は、私は場合には、このコードの結果を示して、私はこれを取得:

enter image description here

あなたが見ることができるように、両方のイメージが間違った色を持っています。私はオープンソースのグラフィックドライバを使っていたためだと思っていましたが、私はプライベートのものをインストールしましたが、問題は続いています。

どうすればこの問題を解決できますか?どうしたの?何か案は? ありがとう!

+1

OpenCVはRGBではなくBGRを使用します。画像を表示する前にBとRのチャンネルを入れ替えるだけです。 'rgb = img1 [(2,1,0)、:、:])plt.imshow(rgb)'、[cvtColor](http:// www。 pyimagesearch.com/2014/11/03/display-matplotlib-rgb-image/)。グレースケール画像は大丈夫です、あなたはカラーマップを使っています。 'plt.imshow(img2、cmap = 'gray')'を使用してください。 – Miki

答えて

6

OpenCVはRGBを使用せず、BGR(青色、緑色、赤色)を使用します。あなたは赤と青の順序を交換する必要があります。次のコードを使用してください。

img1 = cv2.imread("tiger.jpg",3) 

b,g,r = cv2.split(img2)   # get b, g, r 
rgb_img1 = cv2.merge([r,g,b])  # switch it to r, g, b 

plt.subplot(121),plt.imshow(rgb_img1),plt.title('TIGER_COLOR') 

また、グレースケールイメージは問題ありませんが、カラーマップを使用しています。必ず使用してください

plt.imshow(img2, cmap='gray') 
+0

ありがとう!すべての問題は、RGBとBGRの間のミスとカラーマップでした。 OpenCVがRGBのように非普遍的なシステム(BGR)を使うことを決めたのはなぜですか? – Carlos

関連する問題