我想在UIView上执行透视变换(例如在coverflow中看到)
有谁知道这是否可能?
我已经调查过使用CALayer并且已经完成了所有实用的程序员Core Animation播客,但我仍然不清楚如何在iPhone上创建这种转换.
任何帮助,指针或示例代码片段将非常感谢!
http://nuigroup.com/?ACT=28&fid=27&aid=1892_H6eNAaign4Mrnn30Au8d
我正在使用下面的图像进行测试,绿色矩形显示感兴趣的区域.

我在想,如果有可能实现,我希望使用的简单组合的效果cv::getPerspectiveTransform和cv::warpPerspective.我正在分享我到目前为止所写的源代码,但它不起作用.这是结果图像:

因此,有一个vector<cv::Point>是定义感兴趣的区域,但点不存储在任何特定的顺序载体内,这件事情我不能在检测过程中发生改变.无论如何,稍后,向量中的点用于定义a RotatedRect,而这又用于组装cv::Point2f src_vertices[4];,所需的变量之一cv::getPerspectiveTransform().
我对顶点及其组织方式的理解可能是其中一个问题.我还认为使用a RotatedRect不是存储ROI原始点的最佳方法,因为坐标会稍微改变以适应旋转的矩形,这并不是很酷.
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
cv::Mat src = cv::imread(argv[1], 1);
// After some magical procedure, these are points detect that represent …Run Code Online (Sandbox Code Playgroud) 如何扭曲图像?例如,每个角都有一个带有坐标的CGPoint - p1,p2,p3,p4.然后,我需要设置 - p4.x + = 50,p4.y + = 30.所以这个角(p4)应该在2D透视图中拉伸,图像应该扭曲.
替代文字http://www.polar-b.com/scew.png
我试图使用CATransform3D,但似乎不能以这种方式完成,因为它只是改变了视角(旋转,更靠近/更远一侧).也许CGAffineTransform可能有用吗?
如果您知道答案,请写一个示例代码.
提前致谢
将3d变换应用到UIImageView.layer之后,我需要将生成的"视图"保存为新的UIImage ...起初看起来像一个简单的任务:-)但到目前为止没有运气,搜索没有出现任何线索:-(所以我希望有人能够指出我正确的方向.
一个很简单的iPhone项目,请点击这里.
谢谢.
- (void)transformImage {
float degrees = 12.0;
float zDistance = 250;
CATransform3D transform3D = CATransform3DIdentity;
transform3D.m34 = 1.0 / zDistance; // the m34 cell of the matrix controls perspective, and zDistance affects the "sharpness" of the transform
transform3D = CATransform3DRotate(transform3D, DEGREES_TO_RADIANS(degrees), 1, 0, 0); // perspective transform on y-axis
imageView.layer.transform = transform3D;
}
/* FAIL : capturing layer contents doesn't get the transformed image -- just the original
CGImageRef newImageRef = (CGImageRef)imageView.layer.contents;
UIImage *image …Run Code Online (Sandbox Code Playgroud) 我知道将一个正方形转换为一个正方形是一个线性变换,并且可以使用投影矩阵来完成,但我在确定如何构造矩阵时遇到了一些麻烦.
使用投影矩阵进行平移,缩放,旋转和剪切是很简单的.是否有一个简单的投影矩阵将一个方形转换为一个梯形?
我正在开发一个应用程序,我会让用户拍照,例如名片或照片.
然后,用户将迎来对象的四个角(他们拍了一张照片关闭) - 就像它在很多文档/图片/名片扫描应用程序的看出:

我的问题是如何根据这四点来裁剪和修复视角?我一直在寻找几天,看着几个图像处理库没有任何运气.
谁能指出我正确的方向?
我有一个由任意四边形组成的场景.我需要能够将四边形转换成矩形.每个四边形都在2d坐标中,因此它们有4个顶点(x_i, y_i).
转换需要有一个逆,因为想法是在操作矩形后返回原始四边形.
执行此操作最简单的方法是什么?我听说它被称为透视转换,但我发现一些小线索让我觉得这很容易做到.
你们有没有想法,如何扭曲任何四边形的图像?我想实现一个图像,你可以在任何方向拉任何角落,扭曲图像.任何人都知道如何做到这一点?我现在在android中使用和写东西一段时间了,但似乎android没有这个功能.我真的不想写一个新的数学库:).
问候,可以
我正在尝试推导出一个CATransform3D,它将带有4个角点的四边形映射到另一个带有4个新角点的四边形.我花了一点时间研究这个,似乎步骤涉及将原始Quad转换为Square,然后将Square转换为新的Quad.我的方法看起来像这样(从这里借来的代码):
- (CATransform3D)quadFromSquare_x0:(float)x0 y0:(float)y0 x1:(float)x1 y1:(float)y1 x2:(float)x2 y2:(float)y2 x3:(float)x3 y3:(float)y3 {
float dx1 = x1 - x2, dy1 = y1 - y2;
float dx2 = x3 - x2, dy2 = y3 - y2;
float sx = x0 - x1 + x2 - x3;
float sy = y0 - y1 + y2 - y3;
float g = (sx * dy2 - dx2 * sy) / (dx1 * dy2 - dx2 * dy1);
float h = (dx1 * sy - …Run Code Online (Sandbox Code Playgroud) ios ×3
iphone ×3
cocoa-touch ×2
graphics ×2
image ×2
perspective ×2
transform ×2
3d ×1
android ×1
c++ ×1
calayer ×1
clip ×1
distortion ×1
matrix ×1
objective-c ×1
opencv ×1
opengl ×1
projection ×1
quartz-2d ×1
skew ×1
stretch ×1
uiview ×1