gpt4 book ai didi

ios - GPUImage 不同的预览输出

转载 作者:行者123 更新时间:2023-11-29 03:27:24 29 4
gpt4 key购买 nike

第一次使用不同的 GPUImage 过滤器时,我看到了奇怪的性能,GPUImage 在实时预览和输出照片之间显示出相当大的差异。

我目前正在使用 GPUImageSobelEdgeDetectionFilter 遇到这种情况,如下所示;

difference

左侧是设备屏幕的屏幕截图,右侧是输出的照片。它似乎显着降低了检测到的线条的粗细和清晰度,从而输出了截然不同的图片。

我试过打开和关闭 SmoothlyScaleOutput,但由于我目前没有缩放图像,所以这应该不会影响它。

过滤器是这样设置的;

        filterforphoto = [[GPUImageSobelEdgeDetectionFilter alloc] init];
[(GPUImageSobelEdgeDetectionFilter *)filterforphoto setShouldSmoothlyScaleOutput:NO];
[stillCamera addTarget:filterforphoto];

[filterforphoto addTarget:primaryView];
[stillCamera startCameraCapture];

[(GPUImageSobelEdgeDetectionFilter *)filterforphoto setEdgeStrength:1.0];

照片是这样拍的;

        [stillCamera capturePhotoAsImageProcessedUpToFilter:filterforphoto withCompletionHandler:^(UIImage *processedImage, NSError *error){

有谁知道为什么 GPUImage 对实时相机的解释与输出的照片如此不同?仅仅是因为预览的质量比最终图像低得多,因此在全分辨率图像上看起来确实不同吗?

谢谢,

(p.s. 请忽略左右图片的尺寸略有不同,我没有尽可能地照亮它们)

最佳答案

确实是因为实时预览和照片的分辨率不一样。

边缘检测过滤器(以及其他类似过滤器)的工作方式是,它们立即对当前正在处理的像素两侧的像素进行采样。当您以照片的形式提供分辨率高得多的输入时,这意味着边缘检测发生在图像的相对较小的区域上。这也是为什么特定像素半径的高斯模糊在应用于静态照片时与实时预览相比显得弱得多。

要将边缘检测锁定在某个相对大小,您可以在过滤器上手动设置 texelWidthtexelHeight 属性。这些值分别是目标图像的 1/宽度和 1/高度。如果您根据实时预览的大小设置这些值,您应该会在最终照片中看到一致的边缘大小。由于分辨率较高,一些细节可能略有不同,但应该基本相同。

关于ios - GPUImage 不同的预览输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20290530/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com