AndroidフォンでOpenCVを使用して回線を検出しようとしています。「Tutorial 1 Basic - 2. Use OpenCV Camera」のサンプルを修正しました。また、例としてHough Line Transformを使用しています。ただし、ポイントに対して奇妙な数字(少なくとも私が信じているものは奇妙な数字)を取得しています。b の範囲は 1000 から -1000 です。
コードを完全には理解していません (ほとんどの場合、1000 * (a または -b) の加算/減算に関する部分)。
結局、線はまったく見えません。
誰か手を貸してくれませんか?また、さらに情報が必要な場合はお知らせください。
capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
Imgproc.Canny(mGray, mIntermediateMat, 80, 100);
Imgproc.HoughLines(mIntermediateMat, mLines, 1, Math.PI/180, 100);
Scalar color = new Scalar(0, 0, 255);
double[] data;
double rho, theta;
Point pt1 = new Point();
Point pt2 = new Point();
double a, b;
double x0, y0;
for (int i = 0; i < mLines.cols(); i++)
{
data = mLines.get(0, i);
rho = data[0];
theta = data[1];
a = Math.cos(theta);
b = Math.sin(theta);
x0 = a*rho;
y0 = b*rho;
pt1.x = Math.round(x0 + 1000*(-b));
pt1.y = Math.round(y0 + 1000*a);
pt2.x = Math.round(x0 - 1000*(-b));
pt2.y = Math.round(y0 - 1000 *a);
Core.line(mIntermediateMat, pt1, pt2, color, 3);
}
Imgproc.cvtColor(mIntermediateMat, mRgba, Imgproc.COLOR_GRAY2BGRA, 4);
Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
if (Utils.matToBitmap(mRgba, bmp))
return bmp;
bmp.recycle();
return null;