Ich habe derzeit eine ArrayList<MatOfPoint>
, die die Konturen des Bildes speichert und die größte Kontur abgerufen hat, die mein Ziel für die WarpPerspektive ist.OpenCV getPerspectiveTransform und warpPerspective Java
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(matOut, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
sort(contours);
MatOfPoint2f m2f = MatOfPoint2f(contours.get(0).toArray());
double arc = Imgproc.arcLength(m2f, true);
MatOfPoint2f approx = new MatOfPoint2f();
Imgproc.approxPolyDP(m2f, approx, arc*0.02, true);
Ich habe Probleme, wie den getPerspectiveTransform verwenden und dann die warpPerspective Anwendung das Bild zu ändern, so dass es in einem 450x450 Bild passen.
Ich fand ein ziemlich gutes Beispiel dafür in Python, aber ich bin nicht sehr vertraut damit kann jemand erklären, wie ich in Java korrigieren würde?
def rectify(h):
''' this function put vertices of square we got, in clockwise order '''
h = h.reshape((4,2))
hnew = np.zeros((4,2),dtype = np.float32)
add = h.sum(1)
hnew[0] = h[np.argmin(add)]
hnew[2] = h[np.argmax(add)]
diff = np.diff(h,axis = 1)
hnew[1] = h[np.argmin(diff)]
hnew[3] = h[np.argmax(diff)]
return hnew
hier ist die Quelle Link: https://github.com/abidrahmank/OpenCV2-Python/blob/master/OpenCV_Python_Blog/sudoku_v_0.0.6/sudoku.py