2016-04-30 17 views
9

Formula cho chiều dài tiêu cự được đưa ra dưới đây:Muốn tìm độ dài tiêu cự đầu tiên sau đó khoảng cách của khuôn mặt được phát hiện trong thời gian thực sử dụng opencv android

F = (P x D)/W

Nhưng tôi không thể để tìm giá trị pixel (P) của hình chữ nhật xuất hiện trên khuôn mặt được phát hiện trong thời gian thực:

Bạn muốn tìm chiều rộng của hình chữ nhật được vẽ xung quanh điện thoại di động trong hình ảnh:

enter image description here

Nó đã được thực hiện bằng cách sử dụng Python và OpenCV nhưng tôi nhầm lẫn về cách thực hiện nó trong Java OpenCV.

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

+0

Vui lòng thêm một số dòng từ mã mà bạn đang sử dụng để thực hiện điều này trong Java. – abggcv

Trả lời

0

Trong hình ảnh bạn thêm bạn đã vẽ một hình vuông xung quanh điện thoại, do đó bạn đã có chiều rộng của hình vuông. Những gì tôi hiểu từ câu hỏi của bạn là bạn muốn có được hình chữ nhật thực xung quanh điện thoại.

Đối với điều này đạt được có thể có một số giải pháp nhưng một thực hiện thông qua hợp tác với các đường nét giống như đoạn mã sau:

// 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); 
Các vấn đề liên quan