質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

2627閲覧

Android studioを用いたOpenCVでの色、文字認識

ninzinman

総合スコア33

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2019/10/06 02:44

前提・実現したいこと

今openCVを用いて色認識、文字認識、図形認識を行うプログラムを作成しているのですが、
とあるサイト内にあった”四角形を認識する方法”は実装したのですが、色認識、文字認識を実装するにあたり、
今使っているツールでの実例且つ先ほど述べた実装ソースに組み合わせやすい方法が見つかりません。
具体的でなくてもいいのでここであれをしたらいいのではということでも教えていただければと思います。

発生している問題・エラーメッセージ

適切な手段がわからない

該当のソースコード

java

1import android.content.Intent; 2import android.graphics.Bitmap; 3import android.os.Parcelable; 4import android.os.Bundle; 5import android.widget.ImageView; 6 7import androidx.appcompat.app.AppCompatActivity; 8 9import org.opencv.android.Utils; 10import org.opencv.core.Core; 11import org.opencv.core.CvType; 12import org.opencv.core.Mat; 13import org.opencv.core.MatOfPoint; 14import org.opencv.core.MatOfPoint2f; 15import org.opencv.core.Point; 16import org.opencv.core.Scalar; 17import org.opencv.core.Size; 18import org.opencv.imgproc.Imgproc; 19 20import java.util.ArrayList; 21import java.util.List; 22 23public class Seartchj extends AppCompatActivity { 24 static { 25 System.loadLibrary("opencv_java3"); 26 } 27 Bitmap picture; 28 private ImageView imageView2; 29 int youso[][]= new int[16][16]; 30 @Override 31 protected void onCreate(Bundle savedInstanceState) { 32 //imageView = findViewById(R.id.image_vie); 33 super.onCreate(savedInstanceState); 34 setContentView(R.layout.activity_seartchj); 35 imageView2 = findViewById(R.id.image_vie); 36 Intent i= getIntent(); 37 picture = (i!=null)? (Bitmap) i.getParcelableExtra("data") :null; 38 onImageScan(); 39 } 40 private void onImageScan() { 41 Mat mat = new Mat(); 42 Utils.bitmapToMat(picture, mat, false); 43 mat = getThreshold(mat); 44 List<MatOfPoint> contours = getContour(mat); 45 List<List<Point>> points = contour2point(contours); 46 } 47 private Mat getThreshold(Mat mat) { 48 Mat mat_rgb = mat.clone(); 49 List<Mat> channels_rgb = new ArrayList<Mat>(); 50 Core.split(mat_rgb, channels_rgb); 51 Imgproc.cvtColor(mat_rgb, mat_rgb, Imgproc.COLOR_RGB2GRAY); 52 Core.subtract(channels_rgb.get(0), mat_rgb, channels_rgb.get(0)); 53 Core.subtract(channels_rgb.get(1), mat_rgb, channels_rgb.get(1)); 54 Core.subtract(channels_rgb.get(2), mat_rgb, channels_rgb.get(2)); 55 Imgproc.threshold(channels_rgb.get(0), channels_rgb.get(0), 0.0, 255.0, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU); 56 Imgproc.threshold(channels_rgb.get(1), channels_rgb.get(1), 0.0, 255.0, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU); 57 Imgproc.threshold(channels_rgb.get(2), channels_rgb.get(2), 0.0, 255.0, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU); 58 List<MatOfPoint> contour_rgb0 = getContour(channels_rgb.get(0)); 59 List<MatOfPoint> contour_rgb1 = getContour(channels_rgb.get(1)); 60 List<MatOfPoint> contour_rgb2 = getContour(channels_rgb.get(2)); 61 Mat mat_yuv = mat.clone(); 62 Imgproc.cvtColor(mat_yuv, mat_yuv, Imgproc.COLOR_BGR2YUV); 63 List<Mat> channels_yuv = new ArrayList<Mat>(); 64 Core.split(mat_yuv, channels_yuv); 65 Imgproc.cvtColor(mat_yuv, mat_yuv, Imgproc.COLOR_RGB2GRAY); 66 Core.subtract(channels_yuv.get(0), mat_yuv, channels_yuv.get(0)); 67 Core.subtract(channels_yuv.get(1), mat_yuv, channels_yuv.get(1)); 68 Core.subtract(channels_yuv.get(2), mat_yuv, channels_yuv.get(2)); 69 Imgproc.threshold(channels_yuv.get(0), channels_yuv.get(0), 0.0, 255.0, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU); 70 Imgproc.threshold(channels_yuv.get(1), channels_yuv.get(1), 0.0, 255.0, Imgproc.THRESH_BINARY_INV | Imgproc.THRESH_OTSU); 71 Imgproc.threshold(channels_yuv.get(2), channels_yuv.get(2), 0.0, 255.0, Imgproc.THRESH_BINARY_INV | Imgproc.THRESH_OTSU); 72 List<MatOfPoint> contour_yuv0 = getContour(channels_yuv.get(0)); 73 List<MatOfPoint> contour_yuv1 = getContour(channels_yuv.get(1)); 74 List<MatOfPoint> contour_yuv2 = getContour(channels_yuv.get(2)); 75 Mat mat_mask = new Mat(mat.size(), CvType.CV_8UC4, Scalar.all(255)); 76 Scalar color = new Scalar(0, 0, 0); 77 Imgproc.drawContours(mat_mask, contour_rgb0, -1, color, -1); 78 Imgproc.drawContours(mat_mask, contour_rgb1, -1, color, -1); 79 Imgproc.drawContours(mat_mask, contour_rgb2, -1, color, -1); 80 Imgproc.drawContours(mat_mask, contour_yuv0, -1, color, -1); 81 Imgproc.drawContours(mat_mask, contour_yuv1, -1, color, -1); 82 Imgproc.drawContours(mat_mask, contour_yuv2, -1, color, -1); 83 Imgproc.cvtColor(mat_mask, mat_mask, Imgproc.COLOR_RGB2GRAY); 84 Imgproc.threshold(mat_mask, mat_mask, 0.0, 255.0, Imgproc.THRESH_BINARY_INV | Imgproc.THRESH_OTSU); 85 return mat_mask; 86 } 87 88 private List<MatOfPoint> getContour(Mat mat) { 89 List<MatOfPoint> contour = new ArrayList<MatOfPoint>(); 90 List<MatOfPoint> tmp_contours = new ArrayList<MatOfPoint>(); 91 Mat hierarchy = Mat.zeros(new Size(5, 5), CvType.CV_8UC1); 92 Imgproc.findContours(mat, tmp_contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_TC89_L1); 93 for (int i = 0; i < tmp_contours.size(); i++) { 94 if (Imgproc.contourArea(tmp_contours.get(i)) < mat.size().area() / (100 * 1)) { 95 continue; 96 } 97 MatOfPoint2f ptmat2 = new MatOfPoint2f(tmp_contours.get(i).toArray()); 98 MatOfPoint2f approx = new MatOfPoint2f(); 99 MatOfPoint approxf1 = new MatOfPoint(); 100 double arclen = Imgproc.arcLength(ptmat2, true); 101 Imgproc.approxPolyDP(ptmat2, approx, 0.02 * arclen, true); 102 approx.convertTo(approxf1, CvType.CV_32S); 103 if (approxf1.size().area() != 3) { 104 youso[0][0]=1; 105 }else if(approxf1.size().area() !=4){ 106 youso[1][0]=1; 107 }else if(approxf1.size().area() !=0){ 108 youso[2][0]=1; 109 }else if(approxf1.size().area() !=5){ 110 youso[3][0]=1; 111 }else if(approxf1.size().area() !=6){ 112 youso[4][0]=1; 113 } 114 contour.add(approxf1); 115 } 116 return contour; 117 } 118 119 private List<List<Point>> contour2point(List<MatOfPoint> contour) { 120 List<List<Point>> points = new ArrayList<List<Point>>(); 121 for(int i = 0; i < contour.size(); i++) { 122 points.add(contour.get(i).toList()); 123 } 124 return points; 125 } 126 public void sign(int c[][]){ 127 if(c[0][0]==1&&c[0][1]==1){ 128 //stop 129 imageView2.setImageResource(R.drawable.pen); 130 }else if(c[4][0]!=1){ 131 //mitei 132 } 133 } 134 135}

試したこと

あらゆるサイトでの情報収集

補足情報(FW/ツールのバージョンなど)

Android studio 3.4
OpenCV3.4.3
Android 9
API level 28

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問