質問編集履歴

2

文の追加

2020/06/08 22:20

投稿

tukim
tukim

スコア8

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,6 @@
1
1
  Opencvを利用し楽譜の画像を読み込み五線譜の輪郭をなんとなくとることができたのですが、これをそれぞれの囲みごとにトリミングしたいのですが方法が分かりません。
2
+
3
+ やろうと思ったのは Imgproc.findContoursで得た座標を使ってトリミングしようと思ったのですが具体的に何を使用すればよいかわかりません。どうかお願いします。
2
4
 
3
5
  ### ソース
4
6
 

1

画像の追加

2020/06/08 22:20

投稿

tukim
tukim

スコア8

test CHANGED
@@ -1 +1 @@
1
- AndroidStudioでOpenCVのハフ変換のがうまくきな
1
+ OpenCVで検出した輪郭をトリミングした
test CHANGED
@@ -1,61 +1,65 @@
1
- ピアノ楽譜から音階を画像認識したく[こちらの記事](https://qiita.com/Anadreline/items/4cf6e88c743a65b7da2c)参考にAndoroidStudioにて開発ていたがハフ変換るところ実行アプが落ちてまっ。画像を二値化して反転処理したところまは画像表示されたがどこか書き方が誤っているのでしょうか。
1
+ Opencv利用楽譜の画像読み込み五線譜の輪郭をなんとなくときたのでが、これをそれぞれの囲みごにトミングしたいのが方りません
2
2
 
3
3
  ### ソース
4
4
 
5
5
  ```java
6
6
 
7
- findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
7
+ cvtColor(mat, mat, COLOR_RGB2GRAY);
8
8
 
9
+ Photo.fastNlMeansDenoising(mat, den, 6, 7, 21);
9
10
 
11
+ Imgproc.adaptiveThreshold(den, adp, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 17, 2);
10
12
 
11
- @Override
12
-
13
- public void onClick(View v) {
14
-
15
-
16
-
17
- Mat mat = new Mat();
18
-
19
- Mat den = new Mat();
20
-
21
- Mat adp = new Mat();
22
-
23
- Mat bin = new Mat();
24
-
25
- Utils.bitmapToMat(bmp,mat);
26
-
27
-
28
-
29
- cvtColor(mat,mat,COLOR_RGB2GRAY);
30
-
31
- Photo.fastNlMeansDenoising(mat,den, 6, 7, 21);
32
-
33
- Imgproc.adaptiveThreshold(den,adp, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 17, 2);
34
-
35
- Core.bitwise_not(adp,bin);
13
+ Core.bitwise_not(adp, bin);
36
14
 
37
15
  Mat linesMat = new Mat();
38
16
 
39
- int width = 0;
40
-
41
- Imgproc.HoughLinesP(mat, linesMat, 1d, Math.PI / 360d, width / 80, width / 80d, 7d);
17
+ Imgproc.HoughLinesP(bin, linesMat, 1d, Math.PI / 360d, 200, 100d, 23);
42
18
 
43
19
 
44
20
 
45
21
 
46
22
 
23
+ Mat bmpmat = new Mat();
47
24
 
25
+ Utils.bitmapToMat(bmp, bmpmat);
48
26
 
27
+ double[] data;
49
28
 
29
+ Point pt1 = new Point();
50
30
 
51
- Utils.matToBitmap(mat,bmp);
31
+ Point pt2 = new Point();
52
32
 
53
- imageView.setImageBitmap(bmp);
33
+ int rouws = linesMat.rows();
54
34
 
55
- }
35
+ for (int i = 0; i < rouws; i++) {
56
36
 
57
- });
37
+ data = linesMat.get(i, 0);
58
38
 
39
+ pt1.x = data[0];
59
40
 
41
+ pt1.y = data[1];
42
+
43
+ pt2.x = data[2];
44
+
45
+ pt2.y = data[3];
46
+
47
+ Imgproc.line(bmpmat, pt1, pt2, new Scalar(255, 0, 0), 18);
48
+
49
+ }
50
+
51
+ cvtColor(bmpmat, bmpmat, COLOR_RGB2GRAY);
52
+
53
+ Core.bitwise_not(bmpmat,mat_output);
54
+
55
+ List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
56
+
57
+ Mat hierarchy = new Mat();
58
+
59
+ Imgproc.findContours(mat_output, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_TC89_L1);
60
+
61
+ Imgproc.drawContours(mat, contours, -1, new Scalar(0, 255, 0), 1);
60
62
 
61
63
  ```
64
+
65
+ ![実行画面](b000c0b03a112a34087755403cb51d18.png)