2017-06-26 23 views
0

我碰到了這個函數,用於在背景上覆蓋透明圖像。 https://gist.github.com/maximus5684/082f8939edb6aed7ba0aJava相當於opencv C++ Mat-> data []

它在C++中很好用。但在轉換回java時。我無法找到與此特定等效的Java調用。

double opacity = ((double)overlay->data[fY * overlay->step + fX * overlay->channels() + 3])/255;

我使用官方opencv的Java綁定版本3.1將其轉換爲Java。 任何人都可以引導我正確的方向嗎?

+0

你使用官方的Java綁定?請在你的問題中加上OpenCV版本。 –

+0

你還可以包含'overlay'矩陣的定義嗎?預期的維度和價值類型是什麼? –

+1

只需要位置'(fX,fY)'處的'overlay'的第四個通道的值,將其轉換爲double並通過「1.0/255.0」進行縮放。 –

回答

1

也不推薦使用OpenCV C++ API。你有模板Mat::at功能,它可讓您通過參考檢索矩陣的特定點的值:

double opacity = static_cast<double>(overlay->at<unsigned char>(fy, fx, 3)); 

由於Java沒有指針運算,也不數組元素的純引用,綁定提供getput方法重載。如果我沒有記錯,你應該嘗試這樣的:

double opacity = overlay.get(fy, fx)[3]/255.; 
src.put(y, x, srcPx * (1. - opacity) + overlayPx * opacity); 
+0

感謝它的幫助。如果有人需要它,這裏也是完整的轉換。 https://pastebin.com/X3VNqAxA –