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で試してみましたが、実際には何の違いもありませんでした. とにかく、私のビデオフレームはカラーで返されますが、なぜ画像がグレースケールになっているのですか?
本当にここで立ち往生!どんな提案でも本当に役に立ちます!