2015-12-24 34 views
1

我想提取採用鹵化物有一個頻道的元組工作,採用鹵化物

Halide::Image<uint8_t> input = load_image("images/rgb.png"); 
Halide::Var x, y; 
Halide::Func green; 
green(x,y)= {0, input(x, y, 1), 0}; 

Halide::Image<uint8_t> output = 
     green.realize(input.width(), input.height()); 

只能投單元素的實現,以緩衝或圖像

它必須很簡單

回答

0

我認爲你想要:

green(x, y) = input(x, y, 1); 

你已經創建了三個輸出圖像的元組,其中兩個爲零。

+0

否我想要彩色圖像,只有綠色通道值> 0 –

+0

您的代碼提取一個通道並給出灰色圖像(填充所有3個通道具有相同的值) –

2

這聽起來像你想要一個三通道輸出,其中兩個都是零,一個是輸入圖像相應通道的內容。要做到這一點,請嘗試:

green(x, y, c) = select(c == 1, input(x, y, 1), 0); 

如果這是展開和有界的,那麼在執行過程中將沒有條件評估。

+0

在本教程中,不鼓勵在這種情況下使用「select」 。 –

+0

它也會爲c = 0到3 {for y = 0 to height {for x = 0 to width {}}}生成難看的代碼 –

+0

推測您的意思是來自教程13: // 2)它需要一個select如果不是 //有界和展開: // brighter.bound(c,0,3).unroll(c);這幾乎是我寫的東西。您必須綁定c維並展開該維上的循環。 你也可以使用像「input(x,y,c)*(c == 1)」這樣的表達式,但是如果這會產生更好的代碼,我會感到驚訝。 –