倾斜校正的透视变换
要使用透视变换对一组点实现倾斜校正效果,必须了解以下内容:
点排序:
点的顺序在透视变换中很重要。为了确保准确性,源向量和目标向量的顺序必须一致。
图像大小:
如果您希望生成的图像仅包含以下对象如果您感兴趣,请设置其宽度和高度以匹配生成的矩形的尺寸。
性能注意事项:
对于旋转、调整大小和倾斜校正等仿射变换,使用仿射变换效率更高对应:
仿射变换:
getAffineTransform()仅需要三个点并提供 2x3 矩阵,而warpAffine() 执行变形。
调整结果图像的大小:
要将结果图像的大小调整为与输入不同的大小,使用:
cv::Size size(box.boundingRect().width, box.boundingRect().height); cv::warpPerspective(src, dst, size, ... );
示例:
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);
以上是如何使用透视变换和仿射变换对点进行倾斜校正?的详细内容。更多信息请关注PHP中文网其他相关文章!