Tôi đã thử mã bên dưới bằng cách sử dụng các chức năng OpenCV
cvtColor
, Canny
và HoughLinesP
nhưng không thể nhận được kết quả chính xác hoặc không hoạt động trong một số trường hợp.Làm thế nào để phát hiện (Đếm) Tóc từ hình ảnh sử dụng OpenCV?
private boolean opencvProcessCount(Uri picFileUri) {
hairCount = 0;
totalC = 0;
//Log.e(">>>>>>>>","count " + picFileUri);
try {
InputStream iStream = getContentResolver().openInputStream(picFileUri);
byte[] im = getBytes(iStream);
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inDither = true;
opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap image = BitmapFactory.decodeByteArray(im, 0, im.length);
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;
Imgproc.HoughLinesP(mRgba, lines, 1, Math.PI/180, threshold, minLineSize, lineGap);
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);
// Imgproc.
} catch (Throwable e) {
// Log.e(">>>>>>>>","count " + e.getMessage());
e.printStackTrace();
}
return false;
}
Dưới đây là hình ảnh mẫu để đếm tóc:
Xin chào, bạn có thể cung cấp mã tối giản không? (Không có Bitmap, không có biến thành viên toàn cục, v.v.) Điều này sẽ giúp người khác tập trung hơn vào vấn đề. – saurabheights
và có thể một số hình ảnh từ các bước tiền xử lý của bạn, chẳng hạn như canny và cả các đường hough tìm thấy? – PSchn
@ saurabheights, Ở đây tôi đã thêm mã thực tế để mọi người có thể xác định được vấn đề của tôi hoặc triển khai sai nếu tôi đã làm. –