スマホでロボットアームを動かす

スマホでロボットアームを動かす

 

続き

今回よりOpenCVを使えないかを研究していきます。

先ずは「OpenCV 円 検出」で検索。

 

各種情報を入手して最初にやるべき事、OpenCVをダウンロード

続いてモジュールのインポート。

早くもここで躓きました。

情報に倣ってやっても上手く行きません。

最新版のOpenCV – 4.6.0がダメで何段階かバージョンを落として試しましたが全てダメ

 

何が悪いのか分からず仕舞いです。

 

仕方が無いので自前のアプリ AviMaker(連番jpgからaviファイルを生成するアプリでgoogle play公開中)OpenCVが動いているアプリのプロジェクトを引っ張り出して来てそれを基にテスト用アプリを作りました。(OpenCVの部分以外すべてそぎ落として)

 

バージョンはopenCVLibrary331

プログラムは円を検出する (dazoo.ne.jp)を参考にさせてもらいました。

 

// test用
 image = imread( file.getAbsolutePath() + "/" + "test.jpg");
 Mat circles = new Mat();
 Mat gray = new Mat();
 Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY);
 Imgproc.HoughCircles(gray, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 100, 100, 20,  10, 0);
 fncDrwCircles(circles,image);
 Bitmap dst = Bitmap.createBitmap(image.width(), image.height(),  Bitmap.Config.ARGB_8888);

 Utils.matToBitmap(image, dst);

 mImageView1.setImageBitmap(dst);

private void fncDrwCircles(Mat circles ,Mat img) {
 double[] data;
 double rho;
 org.opencv.core.Point pt = new org.opencv.core.Point();
 for (int i = 0; i < circles.cols(); i++){
 data = circles.get(0, i);
 pt.x = (int)data[0];
 pt.y = (int)data[1];
 rho = data[2];
 Imgproc.circle(img, pt, (int)rho, new Scalar(255, 0, 0),2);
}

 

SDカード内にtest.jpgを保存

 

実行するとこんな感じ

 

Imgproc.HoughCirclesのパラメーターを調節して

いい感じになりました。

 

物になりそうです。

この機能をロボットアームアプリに組み込んでいきます。(実際は逆です)

 

また、更新します。

 

mckeechan.hatenadiary.jp