Transformasi Perspektif untuk Deskewing
Untuk mencapai kesan deskewing pada set mata menggunakan transformasi perspektif, adalah penting untuk memahami perkara berikut:
Titik Pesanan:
Susunan mata penting dalam transformasi perspektif. Untuk memastikan ketepatan, susunan mesti konsisten dalam kedua-dua vektor sumber dan destinasi.
Saiz Imej:
Jika anda mahu imej yang terhasil hanya mengandungi objek minat, tetapkan lebar dan tingginya agar sepadan dengan dimensi segi empat tepat yang terhasil.
Prestasi Pertimbangan:
Untuk transformasi affine seperti putar, ubah saiz dan deskew, adalah lebih cekap untuk menggunakan affine rakan sejawat:
Affine Transform:
getAffineTransform() hanya memerlukan tiga mata dan menyediakan matriks 2x3, manakala warpAffine() melakukan peledingan.
Mengubah saiz Imej Terhasil:
Untuk mengubah saiz imej yang terhasil kepada saiz yang berbeza daripada input, gunakan:
cv::Size size(box.boundingRect().width, box.boundingRect().height); cv::warpPerspective(src, dst, size, ... );
Contoh:
vector<Point> not_a_rect_shape; not_a_rect_shape.push_back(Point(408, 69)); not_a_rect_shape.push_back(Point(72, 2186)); not_a_rect_shape.push_back(Point(1584, 2426)); not_a_rect_shape.push_back(Point(1912, 291)); RotatedRect box = minAreaRect(cv::Mat(not_a_rect_shape)); Point2f pts[4]; box.points(pts); Point2f src_vertices[3]; src_vertices[0] = pts[0]; src_vertices[1] = pts[1]; src_vertices[2] = pts[3]; Point2f dst_vertices[3]; dst_vertices[0] = Point(0, 0); dst_vertices[1] = Point(box.boundingRect().width-1, 0); dst_vertices[2] = Point(0, box.boundingRect().height-1); Mat warpAffineMatrix = getAffineTransform(src_vertices, dst_vertices); cv::Size size(box.boundingRect().width, box.boundingRect().height); warpAffine(src, rotated, warpAffineMatrix, size, INTER_LINEAR, BORDER_CONSTANT);
Atas ialah kandungan terperinci Bagaimana untuk Mengecilkan Mata Menggunakan Transformasi Perspektif dan Transformasi Affine?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!