1

Android(ネイティブ部分、.cpp)のビデオフレームに画像をオーバーレイしようとしています。ビデオフレームをyuv420sp形式で取得し、このchar *(バッファ)をopencvに渡し、そこでMATを作成します

   Mat frame(Size(width,height),8UC1,buff);

同じように、イメージを char *(buffer) にロードし、yuv420SP に変換し、同様の方法でイメージ Mat を作成します。

Mat imageMat((Size(width,height),8UC1,imgBuff));

この後、受け取ったビデオ フレームのオーバーレイ イメージを次のようにコピーします。

Rect roi(X,Y,U,V);
imageMat.copyTo(frame(roi));

そして、このマージされたフレームが同じ yuv420sp 形式で必要なので、ここで戻ります:

return frame.data;//i am returning char * from this api to my .cpp file 

画像は適切にオーバーレイされていますが、問題はオーバーレイされた部分だけがグレースケールであり、残りのフレーム全体が適切に着色されていることです! 何が悪いのか理解できません!

注:私はすでに次のようないくつかのことを試しました:1.私は両方のもの(フレームと画像)を次の方法で変換しました:

cvtColor(frame,frame,CV_COLOR_yuv420sp2BGR);

しかし、yuv420sp形式でのみ応答を返したいのですが、yuv420spに戻すフラグはありません。

2.8UC3で試してみましたが、実際には何の違いもありませんでした. とにかく、私のビデオフレームはカラーで返されますが、なぜ画像がグレースケールになっているのですか?

本当にここで立ち往生!どんな提案でも本当に役に立ちます!

4

0 に答える 0