を返し、私はこの例の手順を使用して、NDKのサポートとOpenCVのネイティブライブラリとのAndroid Studioプロジェクトを作成しました:OpenCVのいつものブラックマスク
https://github.com/leadrien/opencv_native_androidstudio
この例では、正常に動作して、私はgrabCutアルゴリズムを使用しようとしています。私のアプリは、元の画像、変換された画像、使用されたマスクの3つの画像を主なアクティビティに表示する必要があります。しかし、実際に表示されているマスクはすべて黒です。そのため、処理された画像は元の画像に似ています。
私のJavaコード:
private void processImage(){
Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pastis);
Bitmap bmp32 = srcBitmap.copy(Bitmap.Config.ARGB_8888, true);
Mat imgToProcess = new Mat();
Mat mask = new Mat();
//utils from opencv library
Utils.bitmapToMat(bmp32, imgToProcess);
//NDK function
salt(imgToProcess.getNativeObjAddr(), mask.getNativeObjAddr(), 2000);
Bitmap bmp = Bitmap.createBitmap(imgToProcess.cols(), imgToProcess.rows(), Bitmap.Config.ARGB_8888);
//utils from opencv library
Utils.matToBitmap(imgToProcess, bmp);
Bitmap bmpMask = Bitmap.createBitmap(mask.cols(), mask.rows(), Bitmap.Config.ARGB_8888);
//utils from opencv library
Utils.matToBitmap(mask, bmpMask);
ImageView imageContainer = (ImageView) findViewById(R.id.resultImage);
imageContainer.setImageBitmap(bmp);
ImageView maskContainer = (ImageView) findViewById(R.id.maskImage);
maskContainer.setImageBitmap(bmpMask);
}
そして、私のNDKコードは次のとおりです。
void JNICALL Java_com_ach_MainActivity_salt(JNIEnv *env, jobject instance, jlong matAddrGray, jlong mask, jint nbrElem) {
Mat &mGr = *(Mat *) matAddrGray;
Mat &maskR = *(Mat *) mask;
int r = mGr.rows;
int c = mGr.cols;
Mat bgdModel, fgdModel;
Rect rect = Rect(10, 10,c-10, r-10);
cvtColor(mGr , mGr , CV_RGBA2RGB);
maskR.create(mGr.size(), CV_8UC1);
grabCut(mGr, maskR, rect, bgdModel, fgdModel, 2, GC_INIT_WITH_RECT);
mGr.copyTo(mGr, maskR);
}
¿私はいつもオールブラックマスクを取得していますなぜ?
さらに、画像解像度が256 x 192で2ステップしかない携帯電話(Samsung Galaxy S5)で約50秒かかるgrabCutを実行します。 ¿これは正常ですか?¿これを改善するにはどうしたらいいですか?事前に
感謝:)