2017-11-15 11 views
-1

動き検出器を書き込んでいます。私はフレームの特定の領域で動きを検出することができます。さて、私は透明な色でその領域を強調したいと思います。プレビュー時のオーバーレイ透明色

私はAndroid用OpenCVを使用しています。

thisのような他の言語を使用したチュートリアルが見つかりました。

これらはaddWeighted()を使用して2つの画像をブレンドします。

現時点では、プレビューフレームをオーバーレイしようとしています。

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame { 
mRgba = inputframe.rgba(); 
//defined a Mat that overlays the frame: 
Mat greenOverlay = mRgba.submat(0, mRgba.height(), 0, mRgba.width()/5) 
mGreenOverlay.setTo(GREEN); 

Core.addWeighted(mGreenOverlay,0.5,mRgba,0.5, 0.0, mRgba); 
return mRgba; 
} 

問題は(logcatがこれを示して)greenOverlayとinputFrameが同じサイズを持っていないということです:私は、次のコードを試してみました。 ログメッセージ:

どうすればこの問題を解決できますか?

ソリューション

Torisの答えは動作します。コードは次のようになります。

Mat greenOverlay = mRgba.clone(); 
Imgproc.rectangle(greenOverlay, new Point(0, 0), new 
        Point(mRgba.width()/5, mRgba.height()), GREEN, -1); 
Core.addWeighted(greenOverlay,0.25,mRgba,0.75, 0.0, mRgba); 

答えて

1

質問に示す(Pythonで書かれた)チュートリアルから:

overlay = image.copy() 
output = image.copy() 

cv2.rectangle(overlay, ...) 

とのOpenCVの参照から:
https://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#addweighted

addWeighted ()
src2 - src1と同じサイズとチャネル番号の2番目の入力配列

したがって、mRgbaをクローンしてgreenOverlayを作成し、それにrectを描画します。


サンプルコード(試験せず):

Mat greenOverlay = mRgba.clone(); 
Core.rectangle(greenOverlay, new Point(0, 0), new Point(mRgba.width()/5, mRgba.height()), GREEN, -1); 

Mat greenOverlay = mRgba.submat(0, mRgba.height(), 0, mRgba.width()/5); 
mGreenOverlay.setTo(GREEN); 

を交換

関連する問題