2017-06-26 11 views
0

背景の上に透明なイメージを重ねるためにこの機能を使いました。 https://gist.github.com/maximus5684/082f8939edb6aed7ba0aOpencv C++のJava相当版Mat-> data []

C++でうまく動作します。しかし、Javaに変換中。私はこの特定のJava呼び出しを見つけることができません。

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

私は、Javaに変換する公式OpenCVのJavaバインディングバージョン3.1を使用しています。 誰かが正しい方向に私を導くことができますか?

+0

公式のJavaバインディングを使用していますか?あなたの質問に加えてOpenCVのバージョンを指定してください。 –

+0

'overlay'マトリックスの定義も含めることができますか?予想されるディメンションと値のタイプは何ですか? –

+1

'(fX、fY)'の位置で 'overlay'の4番目のチャンネルの値をちょうど取り、それを倍精度にキャストし、1.0/255.0でスケールします。 –

答えて

1

OpenCV C++ APIを使用することはあまり推奨されません。あなたが参照することにより、マトリックスの特定のポイントの値を取得することを可能にする、代わりにテンプレートMat::at機能を持っている:

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

Javaは配列要素へのポインタ演算や、純粋な参照を持っていないので、バインディングはgetを提供します方法のオーバーロードがあります。私が正しく思い出した場合は、次のようなものを試してみてください:

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

助けてくれてありがとう。また、誰かがそれを必要とする場合、完全な変換があります。 https://pastebin.com/X3VNqAxA –

関連する問題