objective-c - 核心图像 CIPerspectiveTransform 过滤器 : How to use CIVectors?

标签 objective-c ios image-processing core-image

我很难在网上找到任何可以清楚地解释如何正确实现 Core Image 的 CIPerspectiveTransform 过滤器的文档。特别是在为 inputTopLeft 设置 CIVector 值时, inputTopRight , inputBottomRight , 和 inputBottomLeft ,这些向量对图像做了什么? (即,这些向量如何扭曲我的图像背后的数学原理是什么?)

目前这是我正在使用的代码。它不会崩溃,但不会显示图像:

CIImage *myCIImage = [[CIImage alloc] initWithImage:self.image];
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CIPerspectiveTransform" keysAndValues:@"inputImage", myCIImage, @"inputTopLeft", [CIVector vectorWithX:118 Y:484], @"inputTopRight", [CIVector vectorWithX:646 Y:507], @"inputBottomRight", [CIVector vectorWithX:548 Y:140], @"inputBottomLeft", [CIVector vectorWithX:155 Y:153], nil];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *transformedImage = [UIImage imageWithCGImage:cgimg];
[self setImage:transformedImage];
CGImageRelease(cgimg);

其他可能很重要的注意事项:
  • 我的 UIImageView (75pts x 115 pts) 已经通过 awakeFromNib 初始化并且已经有一个与之关联的图像 (151px x 235px)。
  • 上面的代码正在 UIImageView 的 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 中实现。功能。希望我能够根据屏幕坐标调整图像的透视,使图像看起来像在 3D 空间中移动。
  • 此代码适用于 iPhone 应用程序。

  • 同样,我想我要问的问题是各种参数向量的作用,但我可能问错了问题。

    以下帖子非常相似,但询问的是为什么他的图像消失了,而不是如何使用 CIVectors 进行 CIPerspectiveTransform。它也很少受到关注,也许是因为它太笼统了:
    How I can use CIPerspectiveTransform filter

    最佳答案

    正如我对链接问题的评论,CIPerspectiveTransform 是 not available in the iOS implementation of Core Image as of iOS 5.1 .这就是为什么您和其他提问者没有看到任何图像的原因,因为您的 CIFilter 很可能是 nil。

    如果你只想在图像上实现一种透视形式,在 iOS 上有两种不同的快速方法,正如我在 this answer 中描述的那样。 .一种是简单地使用 right kind of CATransform3D在 UIImageView 的图层上,但这仅用于显示,不适用于图像调整。

    第二种方法是在 OpenGL ES 中使用适当的 3-D 变换矩阵来操作图像。正如我在上面链接的答案中指出的那样,我有 an open source framework这包含了所有这些,并且那里的 FilterShowcase 示例有一个将透视图应用于传入视频的示例。您可以轻松地将视频输入与图像交换,并在应用透视效果后从中获取图像。

    关于objective-c - 核心图像 CIPerspectiveTransform 过滤器 : How to use CIVectors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676383/

    相关文章:

    ios - 如何在 objective c 中启用自动布局时增加 uiview 的高度

    iphone - 如何在委托(delegate)和释放 Controller 中识别 CAAnimation?

    objective-c - tableview,更改焦点 tvos 的字体颜色

    ios - Objective C 中的可变副本有什么作用

    后台应用程序时的 iOS 数据持久性

    opencv - 尝试使 mergevec 适应新的 OpenCV (2.4.5)

    Python Opencv : Finding boxes in interrupted picture

    iphone - 自定义单元格中的自定义表格 View 单元格选择颜色

    c++ - SVM 分类器(响应数组必须包含与样本总数一样多的元素)

    ios - objective-c : unrecognized selector sent to instance 0x8d75720