2016-08-02 23 views
0

OpenCVのimread関数を使用して画像をPythonに読み込み、後でパイプラインでNumPy配列として処理します。私はOpenCVがRGBの代わりにBGRを使用していることを知っており、必要に応じてそれを説明しています。しかし、私に悩まされることの1つは、なぜこれらの異なる出力を次のシナリオで得るかということです。OpenCVでPython - ループで画像を読む

イメージを直接1つの細かいイメージに読み込む。プロットされた画像(を使用)は、正しく.tiff/.png入力を再現します。

img_train = cv2.imread('image.png') 
plt.imshow(img_train) 
plt.show() 

enter image description here

私は(そのようなイメージのディレクトリから読み取るため - ここに私の究極の目標である)ループ内でcv2.imreadを使用すると、以下のように、私は配列を作成します。

files = [f for f in listdir(mypath) if isfile(join(mypath, f))] 
img_train = np.empty([len(files), height, width, channel]) 
for n in range(0, len(files)): 
    img_train[n] = cv2.imread(join(mypath, files[n])) 
plt.imshow(img_train[n]) 
plt.show() 

enter image description here

このようにして得られた画像をチェックしてプロットしようとすると、非常に異なる出力が得られます。なぜそうなのか?最初のケースのように、私の入力に似ているようにこれを修正するにはどうすればよいですか?私は2番目のケースで配列を正しく読み込んでいますか、それとも欠陥がありますか?

それ以外の場合は、Matplotlibのプロット機能に由来しますか?私はこの事件のためにどうやってチェックするかわからない。

アドバイスありがとうございます。

+0

最初のケースではimg_train.shape、2番目のケースではimg_train [0] .shapeは同じタプルを与えますか? –

+0

@DrKうん、そうだった。あまりにも早くここに投稿しました。答えを見つけました。以下に更新されました。しかし、私はなぜdtype(私の答えで指定されているように)がこのように影響を与えるのか分かりません。 – mshiv

答えて

0

非常に些細な解決策です。 np.emptyは、デフォルトでdtype floatの配列を作成します。 OpenCVだけの場合のように、これをuint8に変更するとうまくいきました。

関連する問題