我正在开发一款应用程序,可以让用户拍摄一张名片或照片。
然后,用户将标记物体的四个角(他们从物体上取下一张照片)-就像在许多文档/图像/名片扫描应用程序中看到的那样:

我的问题是,我如何根据这四点裁剪和固定透视图?我已经搜索了几天,并查看了几个图像处理库,但没有任何运气。
谁能给我指个方向?
发布于 2017-11-08 19:26:50
在iOS8+中有一个名为CIPerspectiveCorrection的核心图像过滤器。您所需要做的就是传递图像和四个点。

此外,还有一个名为CIPerspectiveTransform的支持iOS6+的过滤器,它可以以类似的方式使用(倾斜图像)。
发布于 2012-01-30 13:57:58
如果将此图像作为纹理加载,则使用OpenGL对其进行倾斜将非常简单。实际上,您只需绘制一个全屏四边形,并使用黄色校正点作为每个点的UV坐标。
发布于 2014-11-26 10:21:28
我不确定你是否已经尝试过Opencv库,但它有一个非常好的去倾斜图像的方法。我这里有一个小的代码片段,它接受一个角的数组,例如你的四个角,以及要映射到的最终大小。
您可以在OpenCV site上阅读warpPerspective的手册页。
cv::Mat deskew(cv::Mat& capturedFrame, cv::Point2f source_points[], cv::Size finalSize)
{
cv::Point2f dest_points[4];
// Output of deskew operation has same color space as source frame, but
// is proportional to the area the document occupied; this is to reduce
// blur effects from a scaling component.
cv::Mat deskewedMat = cv::Mat(finalSize, capturedFrame.type());
cv::Size s = capturedFrame.size();
// Deskew to full output image corners
dest_points[0] = cv::Point2f(0,s.height); // lower left
dest_points[1] = cv::Point2f(0,0); // upper left
dest_points[2] = cv::Point2f(s.width,0); // upper right
dest_points[3] = cv::Point2f(s.width,s.height); // lower right
// Build quandrangle "de-skew" transform matrix values
cv::Mat transform = cv::getPerspectiveTransform( source_points, dest_points );
// Apply the deskew transform
cv::warpPerspective( capturedFrame, deskewedMat, transform, s, cv::INTER_CUBIC );
return deskewedMat;
}https://stackoverflow.com/questions/8235288
复制相似问题