简体   繁体   中英

Want to find the Focal length first then distance of face detected in real time using opencv android

Formula for focal length is given below:

F = (P x D) / W

But I am unable to find pixel value (P) of the rectangle that appears on the detected face in real time:

Want to find the width of rectangle drawn around the mobile phone in the image:

在此输入图像描述

It was done using Python and OpenCV but I am confused as to how to implement it in Java OpenCV.

http://www.pyimagesearch.com/2015/01/19/find-distance-camera-objectmarker-using-python-opencv/

In the image you added you have drawn a square around the phone so you already have the width of the square. What I understand from your question is that you want to get the real rectangle around the phone.

For this to be achieved there can be several solutions but one done through working with contours is like the following code:

// localImage would be the cropped image of the square you have drawn,
// the global image is the original image and phoneSquare is the Rect you 
// have drawn
localImage = new Mat(globalImage, phoneSqure).clone();

// make the phone black and surroundings white
Imgproc.threshold(localImage, localImage, 127, 255, Imgproc.THRESH_OTSU + Imgproc.THRESH_BINARY_INV);

// get contours
ArrayList<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(canny, contours, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_NONE);

// sort contours by size and get the biggest which is assumed to be the outer contour of the phone
contours.sort(new Comparator<MatOfPoint>() {
                                 @Override
                                 public int compare(MatOfPoint o1, MatOfPoint o2) {
                                     return (int) Math.signum(o2.size().area() - o1.size().area());
                                 }
                             });
MatOfPoints biggestContour = contours.get(contours.size() - 1);
// get the bounding rectangle of the phone, the you can get the width
Rect whatYouWant = Imgproc.boundingRect(biggestContour);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM