我正在尝试为我的程序(流式摄像头流)创建一个过滤器,该程序使框架水平翻转,使网络摄像头像镜像一样。

但是,尽管它进行了编译和运行,但该过滤器似乎对此没有任何影响。

这是代码:

CIImage *resultImage = image;
CIFilter *flipFilter = [CIFilter filterWithName:@"CIAffineTransform"];
[flipFilter setValue:resultImage forKey:@"inputTransform"];

NSAffineTransform* flipTransform = [NSAffineTransform transform];
[flipTransform scaleXBy:-1.0 yBy:1.0]; //horizontal flip
[flipFilter setValue:flipTransform forKey:@"inputTransform"];

resultImage = [flipFilter valueForKey:@"outputImage"];

奇怪的是,其他过滤器似乎有效。例如:

CIFilter * ciEffectFilter = [CIFilter filterWithName:@"CIGloom"];
[ciEffectFilter setDefaults];
CIImage *resultImage = image;
[ciEffectFilter setValue: resultImage forKey:@"inputImage"];
[ciEffectFilter setValue:[NSNumber numberWithFloat: 0.75]
                  forKey:@"inputIntensity"];
[ciEffectFilter setValue:[NSNumber numberWithFloat: 20]
                  forKey:@"inputRadius"];
resultImage = [ciEffectFilter valueForKey:@"outputImage"];


CIFilter *ciCropFilter = [CIFilter filterWithName:@"CICrop"];
[ciCropFilter setDefaults];
[ciCropFilter setValue: resultImage forKey:@"inputImage"];
[ciCropFilter setValue: [CIVector vectorWithX:50 Y:50 Z:300 W:
                         300] forKey:@"inputRectangle"];

resultImage = [ciCropFilter valueForKey:@"outputImage"];

与NsaffineTransform有关吗?我环顾四周,但没有找到任何答案。谢谢堆!

有帮助吗?

解决方案

我不确定这是否是问题,但是在您的第一个代码段中,您正在为同一键设置两个不同的值(您设置 inputTransform 两次),我认为第一个应该是 inputImage 反而。尝试以下内容:

CIImage *resultImage = image;
CIFilter *flipFilter = [CIFilter filterWithName:@"CIAffineTransform"];
[flipFilter setValue:resultImage forKey:@"inputImage"];

NSAffineTransform* flipTransform = [NSAffineTransform transform];
[flipTransform scaleXBy:-1.0 yBy:1.0]; //horizontal flip
[flipFilter setValue:flipTransform forKey:@"inputTransform"];

resultImage = [flipFilter valueForKey:@"outputImage"];

另外,您可能需要按图像的宽度翻译X轴

[flipTransform translateXBy:... yBy:0];

其他提示

CIImage *cimage = [[CIImage alloc] initWithImage:image];

您不是在分配CIIMAGE对象。尝试此代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top