У меня есть код ниже, используя функции opencv cvtcolor ,[code]Canny[/code] и houghlinesp , но не в состоянии получить точный результат или не работать в некоторых случаях.
Mat mYuv = new Mat(); Utils.bitmapToMat(image, mYuv); Mat mRgba = new Mat(); Imgproc.cvtColor(mYuv, mRgba, Imgproc.COLOR_RGB2GRAY, 4); Imgproc.Canny(mRgba, mRgba, 80, 90); Mat lines = new Mat(); int threshold = 80; int minLineSize = 30; int lineGap = 100;
for (int x = 0; x < lines.rows(); x++) { double[] vec = lines.get(x, 0); double x1 = vec[0], y1 = vec[1], x2 = vec[2], y2 = vec[3]; Point start = new Point(x1, y1); Point end = new Point(x2, y2); double dx = x1 - x2; double dy = y1 - y2;
double dist = Math.sqrt (dx*dx + dy*dy); totalC ++; Log.e(">>>>>>>>","dist " + dist); if(dist>300.d) { hairCount ++; // Log.e(">>>>>>>>","count " + x); Imgproc.line(mRgba, start, end, new Scalar(0,255, 0, 255),5);// here initimg is the original image. }// show those lines that have length greater than 300
}
Log.e(">>>>>>>>",totalC+" out hairCount " + hairCount);