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);
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