@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
Mat rgb=inputFrame.rgba();
for(int y=0;y<rgb.cols();++y){
for(int x=0;x<rgb.rows();++x){
double[]pixelValues=rgb.get(x,y);
double redVal=pixelValues[0];
double greenVal=pixelValues[1];
double blueVal=pixelValues[2];
double alphaVal=pixelValues[3];
double gryVal=(redVal+greenVal+blueVal)/3;
rgb.put(x,y,gryVal,gryVal,gryVal,alphaVal);
}
}
return rgb;
}
これは、JavaCameraViewコンポーネント内に表示されるcameraStreamのピクセル値を変更するためのコードです。これは非常に遅いです。 3 fps未満です。グレースケール画像を取得するより速い方法があることを知っています{.rgba() => .gray()
またはImproc.cvt()}
を使用しています。私は自分自身でピクセルを扱う自由が必要ですが。私の究極の目標は、私が好きなように赤、緑、青の色を調整できるものを得ることです。ピクセル単位の操作を適用するのが遅い
少なくともこれを30fps(滑らかなフレームレート)にする方法はありますか?
これで動作します。次にバイト[]についてです。だから思考は私がすべての赤の値を削除し、緑の値に置き換える必要があります。どのように私はforループを実装することができます..これはこのように行うことができますか?この配列は、{redVal、greenVAl、blueVal、redVal、...のように配列されていると仮定しています。 ......} これは本当ですか?それとも、他の方法がありますか? –
あなたはBGRのformat.ie {B、G、R、B、G、R ...など}の値を取得します。あなたのforループはRチャンネルとGチャンネルを交換するために青チャンネルをスキップする必要があります。あなたは自分自身をやることができれば満足しているかもしれませんが、byte array.https://stackoverflow.com/questions/38412000/opencv-java-grayscale/38413469#38413469の使用には注意してください。このリンクを参照してください – hariprasad
私はビデオとして保存するためにJavaCameraViewからフレームをキャプチャするために何をすべきか知っていますか?私はopencvのドキュメントを参照しましたが、答えを見つけられませんでした..私は操作されたフレームをキャプチャする必要があります。 –