2014-09-25 133 views
1

我剛剛開始在Python中使用OpenCV,並試圖做一些簡單的事情。首先,我試圖創建一個穩定的藍色圖像(或可能是紅色,如果圖像變成RGB,而不是BGR)。我期待從python-openCV出現藍色(紅色?)圖像,但變黑了

我試過如下:

import numpy as np 
import cv2 

img1 = np.zeros((512,512,3), np.uint8) #Create black image 
img1[0,:,:] = 200 #Add intenstity to blue (red?) plane 
print img1 #Verify image array 
cv2.imshow("II",img1) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 
for _ in range (1,5): 
    cv2.waitKey(1) 

但是,我得到的是一個黑色的圖像。我相當肯定的陣列正確的,因爲打印語句給我的以下內容:

[[[200 200 200] 
    [200 200 200] 
    [200 200 200] 
    ..., 
    [200 200 200] 
    [200 200 200] 
    [200 200 200]] 

[[ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0] 
    ..., 
    [ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0]] 

[[ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0] 
    ..., 
    [ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0]] 

    ..., 
[[ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0] 
    ..., 
    [ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0]] 

[[ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0] 
    ..., 
    [ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0]] 

[[ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0] 
    ..., 
    [ 0 0 0] 
    [ 0 0 0] 
    [ 0 0 0]]] 

是否作出這樣的我看到的,而不是藍色(或紅色?)像一個黑色的意義嗎?

回答

3

什麼你」重新做的是改變顏色0th row。相反,您需要更改第一個或第零個通道的值。

img[:, :, 0] = 255 

這將改變所有的第一或第0信道〜255的這將使您藍色圖像,因爲它是一個BGR圖像的值。

+0

謝謝......我現在感覺有點傻。 – user1245262 2014-09-25 11:39:29

+0

難道我們都在某個點或其他? :) – Froyo 2014-09-25 12:45:08

3

您需要將顏色指定爲元組!如果你想有一個RGB圖像,因爲在陣列非常指數是一個像素,你需要爲B,G,R 3值(OpenCV中設定的像素爲BGR

import numpy as np 
import cv2 

img1 = np.zeros((512,512,3), np.uint8) #Create black image 
img1[:,:] = (255,0,0) #Add intenstity to blue (red?) plane 
print img1 #Verify image array 
cv2.imshow("II",img1,) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 
for _ in range (1,5): 
    cv2.waitKey(1) 

結果:

enter image description here

+0

請注意,opencv假設像素存儲爲BGR而不是RGB – remi 2014-09-25 08:55:24

+0

是的,謝謝提醒! – Kasramvd 2014-09-25 08:58:41

+0

謝謝,我還沒有意識到我可以分配一個這樣的數組維度。 – user1245262 2014-09-25 11:44:05