前提・実現したいこと
opencvで検出した直線と描画した直線の交点を求めようと二つの直線のポインタを配列に入れて、それらを使って交点を計算し、表示したいのですが交点がない場合をうまく区別できていないため描画するときにエラーが起こってしまいます。交点のみをうまくとるにはどうしたらよいでしょうか。
お願いいたします。
該当のソースコード
java
1 //認識した直線の描画 2 Mat bmpmat2 = new Mat(); 3 Utils.bitmapToMat(bmp, bmpmat2); 4 double[] data2; 5 Point pt12 = new Point(); 6 Point pt22 = new Point(); 7 int rows2 = dst.rows(); 8 double[][] lineData = new double[4][rows2]; 9 for (int i = 0; i < rows2; i++) { 10 11 data2 = dst.get(i, 0); 12 pt12.x = data2[0]; 13 pt12.y = data2[1]; 14 pt22.x = data2[2]; 15 pt22.y = data2[3]; 16 Imgproc.line(bmpmat2, pt12, pt22, new Scalar(255, 0, 0), 1); 17 lineData[0][i] = pt12.x; 18 lineData[1][i] = pt12.y; 19 lineData[2][i] = pt22.x; 20 lineData[3][i] = pt22.y; 21 } 22 //垂線の描画 23 int rows =bmpmat.rows(); 24 int cols = bmpmat.cols(); 25 double[][] lineData2 = new double[4][rows2]; 26 for(int i=1 ; i<8 ; i++) { 27 28 Imgproc.line(bmpmat2, new Point(cols*i/8, 0), new Point(cols*i/8, rows), new Scalar(255, 0, 0), 1); 29 lineData[0][i-1] = cols*i/8; 30 lineData[1][i-1] = 0; 31 lineData[2][i-1] = cols*i/8; 32 lineData[3][i-1] = rows; 33 } 34 35 //交点の座標を求める 36 Point[] xpoint = new Point[8*rows2]; 37 int pcon=0; 38 double a1,a2,x1,x2,x3,x4,y1,y2,y3,y4,x,y; 39 40 for(int i=0 ; i<rows2 ; i++) { 41 x1=lineData[0][i]; 42 x2=lineData[2][i]; 43 y1=lineData[1][i]; 44 y2=lineData[3][i]; 45 46 for(int j=0 ; j<8 ; j++){ 47 48 x3=lineData2[0][j]; 49 x4=lineData2[2][j]; 50 y3=lineData2[1][j]; 51 y4=lineData2[3][j]; 52 a1 = (y2-y1)/(x2-x1); 53 a2 = (y4-y3)/(x4-x3); 54 55 x = (a1*x1-y1-a2*x3+y3)/(a1-a2); 56 y = (y2-y1)/(x2-x1)*(x-x1)+y1; 57 58 59 xpoint[pcon]=new Point(x,y); 60 } 61 } 62 63 64 Imgproc.circle(bmpmat2, xpoint[50],2,new Scalar(0,255,0),-1); 65
実行画面
![実行画面]
赤の横線と縦線の交点を求め五線譜の座標を求めようと思っています。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー