2017-12-13 28 views
-1

私はカラーチャンネルで画像を取得しようとしましたが、グレースケールでは取得しませんでした。ここではそのためのコードである: -グレースケールではない画像のカラーチャンネルに画像を表示する方法は?

img = cv2.imread("image.jpg") 
blue = img[:,:,0].copy() # Blue channel image 
blue[:,:,1] = 0 # Making green channel 0 
blue[:,:,2] = 0 # Making red channel 0 

はしかし、私はグリーンチャンネルと「image.jpg」の青チャンネルの赤のチャネル0を作るしようとすると、それはライン3とラインを指してエラーになります4.

エラー:IndexError: too many indices for array

私はMac上のOpenCV 3.3とPython 3.6を使用しています。

+0

はそれだけで、 '青= img.copyすべきではありませんか()'? – Miki

+0

'blue = img.copy()'は単に 'img'のコピーを作成します。 –

+0

はい、私はそれを知っています。次に、次の2行が必要です – Miki

答えて

3

さて、ここであなたが行く:

import cv2 
import numpy as np 

def get_channel(im, n): 
    if 0 <= n <= 2 and im.shape[2]==3: 
     new_im = np.zeros_like(im) 
     new_im[:, :, n] = im[:, :, n] 

     return new_im 
    return False 

im = cv2.imread(your_image_filename_goes_here) 
cv2.imshow("Chanel", get_channel(im, 0)) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

事はimg形状(X、Y、3)を有しているblueの形状(x、y)を持っているあなたの例です。そのため、青色を表示するのはグレースケールです。なぜなら、2次元配列であるため、opencvは青色チャネルであることを知らないからです。

カラー画像は、3つの「グレースケール画像」だけで構成されていますが、プレーングレースケール画像のように光の強度を表しませんが、特定の色の光の強度を表します。そして、3つのチャンネルを組み合わせると色が得られます。 RGB(またはOpenCVのBGRで)画像は整数(3、3、3)の三次元アレイであるが

y y y 
y y y 
y y y 

グレースケール画像は、整数のちょうど2次元アレイである(3,3) :あなただけのBGR画像の第1のチャネルを取る場合は、あなたが取っている

B B B G G G R R R 
B B B G G G R R R 
B B B G G G R R R 

(3、3):

B B B 
B B B 
B B B 

Aグレースケールイメージと同じOpenCVの場合はnd。

+0

それでは、(青色の)形がどのように(x、y)の形で表示されていますか? –

+0

@AQ結局はグレースケール画像なので、 –

+0

赤と緑のチャンネル0の2-Dグレースケール(青のみ)と3-D画像の違いは何ですか? –

3

は、ゼロでマージし、チャンネル分割を行います。

img = cv2.imread("ColorChecker.png") 
b,g,r = cv2.split(img) 
I0 = np.zeros(img.shape[:2], np.uint8) 
B = np.dstack([b,I0,I0]) 
G = np.dstack([I0,g,I0]) 
R = np.dstack([I0,I0,r]) 

enter image description here

+0

'blue = img [:、:、0]'で得られた2次元画像と 'img [:、:、1] = img [:、:、2]で得られた3次元画像=イメージ 'img'に対しては' 0'? –

+0

@AQ 'blue = img [:、:、0]'はあなただけの青色チャンネルを意味し、グレースケールです。 'img [:、:、1] = img [:、:、2] = 0は青色を維持し、緑色と赤色をゼロに設定することを意味し、青色で表示されます。 2-Dはグレースケール、3-Dはカラー(B = G = R、まだグレースケールは除く)であることを覚えておいてください。 – Silencer

関連する問題