2017-01-26 2 views
0

私の人生にとって、私はこの24時間、これに苦労しています。私は4Dアレイに画像を保存するNeural Netをやっています。配列の最初のインデックスは、基本的にはサンプル「1,2,3」などのサンプルです。ディメンション2,3,4は128x128 x3 rgbピクチャです。今、この過程で、私は入力画像(128x128ではない)を取り出し、それらの画像を再スケーリングします。しかし、サンプルを選んだとき、すべてのカラーチャンネルが混ざり合っていました。だから私は問題がどこにあるのか理解しようとしました。pyplot.imshow()が配列内のカラーチャンネルを変更するのはなぜですか?

ピクチャのサイズを変更してnummber配列(128x128x3)を変数に割り当てると、すべてが「正常」です。より大きい4-d配列に 'サブアレイ'を割り当てると、カラーチャンネルが混ざり合ってしまいます。しかし、元の画像を復元するには255から同一のアレイスライスを減算してください。

元の(1)、サイズ変更された(2)、カラーチャンネルミックス(3)、回復済みのコードスニペット4)。

私はopen cvとpyplot.imshow()が異なる色チャンネルを使用していることを知っていますが、画像を大きな配列に格納することがスイッチの原因です - それは私を混乱させます。いくつかの指針は認められるでしょう。

また、配列(img2-train [0])を「弱体化」してすべての0の配列を取得できます。その部分は本当に混乱しています。それらは同じ数字ですが、imshow()は全く異なる2つのイメージを与えます。

import numpy as np 
import cv2 
import matplotlib.pyplot as plt 
img = cv2.imread(<path to your pic>) 
img2 = cv2.resize(img, (128, 128)) 
train = np.ndarray(shape=(1,128, 128,3)) 
plt.subplot(1,4,1) 
plt.imshow(img) 
plt.subplot(1,4,2) 
plt.imshow(img2) 
plt.subplot(1,4,3) 
train[0] = img2 
plt.imshow(train[0]) 
plt.subplot(1,4,4) 
plt.imshow(255-train[0]) 
plt.show() 

enter image description here

答えて

0

[OK]を使用することができます - これは奇妙でした。 Matplotlibは何らかの理由でデータを異なる方法でスケーリングしていました。 #3で元の画像を復元するには、255で除算しなければなりませんでした。データが0と1の間でスケーリングされたというimshow()文書を検討する際に、教育的な '推測'データは0〜255の間で、私はそれを「手動で」縮尺しました。

plt.subplot(1,4,3) 
train[0] = img2 
plt.imshow(train[0]/255) 
0

OpenCV格納 matplotlibRGB規則を使用しながらBGR規則を使用してカラー画像。

pyplotを使用して画像を表示するときは、単にチャンネルの順序を反転する必要があります

plt.imshow(img[:,:,[2,1,0]) 
plt.imshow(train[0][:,:,[2,1,0]) 
... 

を代わりにあなたがcv2.imshow

+0

は、チャンネルはdoesnの反転:ニューラルネットを供給する際に奇数挙動は、しかし、あなたはあなたのデータは何とか

第三のプロットのための「修正」はちょうどそのある「微調整」取得されていないことを確認したいです元の画像を戻しません。 2番目と3番目の画像を比較すると、それらは同じ数値のセットです(減算するとゼロになります)。私は、カラーチャネル(train [0、:、:、:: - 1)を反転させることで、 – RDS

関連する問題