前提・実現したいこと
画面タッチ時に二値化のプレビューを表示してテンプレートマッチングしたいと思っています。mOutputFrame(inputFrame?)のパスがわからずMatchingDemoクラスに渡せません。パスがどうなってるか教えてくださいm(__)m
また以下のコードでテンプレートマッチングが行えるでしょうか?
該当のソースコード
MainActivity.java
public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {
MatchingDemo MDemo;
private static String TAG = "MainActivity";
JavaCameraView javacameraview;
Mat mOutputFrame;//出力画像
Mat mOutputFrame2;//画像保持用
Mat mOutputFrame3;//画像保持用
Mat mat;
Bitmap tempbitmap;
int touId = 0;//フラグ変数
Bitmap src;//テンプレート画像の読み込み(jpg)
private Camera camera;
BaseLoaderCallback mLoaderCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
//読み込み完了したらカメラビューを開始する
case BaseLoaderCallback.SUCCESS: {
javacameraview.enableView();
break;
}
default: {
super.onManagerConnected(status);
break;
}
}
}
};
//OpenCVが読込できてるかログ確認用
static {
if (OpenCVLoader.initDebug()) {
Log.i(TAG, "Opencv loaded successfully");
} else {
Log.i(TAG, "OpenCV not loaded");
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
javacameraview = (JavaCameraView) findViewById(R.id.java_camera_view);
javacameraview.setVisibility(SurfaceView.VISIBLE);
javacameraview.setCvCameraViewListener(this);
tempbitmap = BitmapFactory.decodeResource( getResources(),R.drawable.test2);
}
@Override
protected void onPause() {
super.onPause();
if (javacameraview != null)
javacameraview.disableView();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (javacameraview != null)
javacameraview.disableView();
}
@Override
protected void onResume() {
super.onResume();
if (OpenCVLoader.initDebug()) {
Log.i(TAG, "Opencv loaded successfully");
mLoaderCallBack.onManagerConnected(LoaderCallbackInterface.SUCCESS);
} else {
Log.i(TAG, "OpenCV not loaded");
//OpenCVLibraryの読み込み
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_11, this, mLoaderCallBack);
}
/*Resources res = getResources();
src = BitmapFactory.decodeResource(res, R.drawable.test2);//テンプレート画像の読み込み
mat = new Mat(new Size(85, 85), CvType.CV_8UC4);
Utils.bitmapToMat(src, mat); */
}
@Override
public void onCameraViewStarted(int width, int height) {
mOutputFrame = new Mat(height, width, CvType.CV_8UC1);
}
@Override
public void onCameraViewStopped() {
mOutputFrame.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame ) {
switch (touId) {
case 0:
mOutputFrame = inputFrame.rgba();
Log.d("OutputFrame","0 "+mOutputFrame);
break;
case 1:
/* mOutputFrame3 = */Imgproc.threshold(inputFrame.gray(), mOutputFrame, 127.0, 255.0, Imgproc.THRESH_BINARY);//二値化
mOutputFrame2 = mOutputFrame;
Log.d("OutputFrame","1 "+mOutputFrame);
Log.d("OutputFrame2","2 "+mOutputFrame2);
// Log.d("OutputFrame2","2 "+mat.data);
//moutputframeのところにファイルパスを入れる?
String args[] = {mOutputFrame,"../res/drawable/test2.bmp","../res/drawable/outfile/output.txt"};
TemplateMatching.main(args);
// run(mOutputFrame.dataAddr(), tempbitmap,Imgproc.TM_CCOEFF);
touId = 2;
break;
case 2:
mOutputFrame = mOutputFrame2;
break;
}
return mOutputFrame;
}
//追加分
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
//画面がタッチされたときの動作
if (touId == 0) {
touId = 1;
} else if (touId == 2) {
touId = 0;
}
break;
case MotionEvent.ACTION_CANCEL:
//他の要因によってタッチがキャンセルされたときの動作
break;
}
return super.onTouchEvent(ev);
}
}
MatchingDemo.java
public class MatchingDemo {
public void run(String inFile, String templateFile, String outFile, int match_method) {
System.out.println("\nRunning Template Matching");
Mat img = Highgui.imread(inFile);
Mat templ = Highgui.imread(templateFile);
// / Create the result matrix
int result_cols = img.cols() - templ.cols() + 1;
int result_rows = img.rows() - templ.rows() + 1;
Mat result = new Mat(result_rows, result_cols, CvType.CV_32FC1);
// / Do the Matching and Normalize
Imgproc.matchTemplate(img, templ, result, match_method);
Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());
// / Localizing the best match with minMaxLoc
Core.MinMaxLocResult mmr = Core.minMaxLoc(result);
Point matchLoc;
if (match_method == Imgproc.TM_SQDIFF || match_method == Imgproc.TM_SQDIFF_NORMED) {
matchLoc = mmr.minLoc;
} else {
matchLoc = mmr.maxLoc;
}
// / Show me what you got
Core.rectangle(img, matchLoc, new Point(matchLoc.x + templ.cols(),
matchLoc.y + templ.rows()), new Scalar(0, 255, 0));
// Save the visualized detection.
System.out.println("Writing "+ outFile);
Highgui.imwrite(outFile, img);
}
}
TemplateMatching.java
public class TemplateMatching {
public static void main(String[] args) {
System.loadLibrary("opencv_java2411");
new MatchingDemo().run(args[0], args[1], args[2], Imgproc.TM_CCOEFF);
}
}
補足情報(言語/FW/ツール等のバージョンなど)
Androidstudio2.2
OpenCV for android 2.4.11
実機ASUS Nexus7 (android6.0.1,API23)
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
基本的にパスは’作業パス’です。特に指定していない限り。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
基本的にパスは’作業パス’です。特に指定していない限り。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/11/10 02:20
自分で調べてみましたが分かりませんでしたm(_ _)m