OpenCVを使用した二値化を行いたいのですが、pathの取得がうまくできずnullポインタの例外のエラーが出てしまいます。このPath取得方法ではいけないのでしょうか?
package com.example.graduate_study;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.widget.ImageView;
//Binarization Page 選択写真の2値化
public class BinarizationActivity extends Activity{
private ImageView imgView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// cv::Mat gray_img = cv::imread("../../image/lenna.png", 1);
String str = Environment.getExternalStorageDirectory().getPath()+"/OpenCV/Sample/esukareta.jpg";
Mat srcMat = Highgui.imread(str, 1);
if (!srcMat.empty()) {
// グレースケール画像に変換
Mat grayMat = new Mat();
Imgproc.cvtColor(srcMat, grayMat, Imgproc.COLOR_BGR2GRAY);
// 固定の閾値処理
// cv::Mat bin_img, bininv_img, trunc_img, tozero_img, tozeroinv_img;
Mat binMat = new Mat();
// 入力画像, 出力画像, 閾値, maxVal, 閾値処理手法
// cv::threshold(gray_img, bin_img, 0, 255, cv::THRESH_BINARY|cv::THRESH_OTSU);
Imgproc.threshold(grayMat, binMat, 0, 255, Imgproc.THRESH_BINARY|Imgproc.THRESH_OTSU);
//適応的な閾値処理
Mat adaptiveMat = new Mat();
// 入力画像, 出力画像, maxVal, 閾値決定手法, 閾値処理手法, blockSize, C
// cv::adaptiveThreshold(gray_img, adaptive_img, 255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY, 7, 8);
Imgproc.adaptiveThreshold(grayMat, adaptiveMat, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 7, 8);
Bitmap binImg = convMatToBitmap(binMat);
ImageView binView = (ImageView)findViewById(R.id.ImageView);
binView.setImageBitmap(binImg);
}
}
// MatからBitmapに変換
Bitmap convMatToBitmap(Mat src) {
Mat dst = new Mat();
// GRAY→RGBAに変換
Imgproc.cvtColor(src, dst, Imgproc.COLOR_GRAY2RGBA, 4);
Bitmap img = Bitmap.createBitmap(src.width(), src.height(), Bitmap.Config.ARGB_8888);
// MatからBitmapに変換
Utils.matToBitmap(dst, img);
imgView.setImageBitmap(img);
return img;
}
}