Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios GPUImage要输出的不同预览_Ios_Iphone_Camera_Gpuimage - Fatal编程技术网

Ios GPUImage要输出的不同预览

Ios GPUImage要输出的不同预览,ios,iphone,camera,gpuimage,Ios,Iphone,Camera,Gpuimage,在使用不同的GPUImage过滤器时,我第一次看到了奇怪的性能,GPUImage在实时预览和输出照片之间显示了相当大的差异 我目前在使用GPUImageSobelEdgeDetectionFilter时遇到这种情况,如下所示 在左侧,我有一个设备屏幕的截图,在右侧,是输出的照片。它似乎显著降低了输出完全不同图片的检测线的厚度和清晰度 我已经尝试过打开和关闭SmoothlyScaleOutput,但由于我目前没有缩放图像,因此不应该影响它 过滤器是这样设置的 filterforp

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

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

在左侧,我有一个设备屏幕的截图,在右侧,是输出的照片。它似乎显著降低了输出完全不同图片的检测线的厚度和清晰度

我已经尝试过打开和关闭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对实时摄像机的解读与输出的照片如此不同吗?这仅仅是因为预览的质量远低于最终图像,因此在全分辨率图像上看起来确实不同吗

谢谢


(另外,请忽略左右图像上的大小稍有不同,我没有像本来那样亮起来)

原因确实是因为实时预览和照片的分辨率不同

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


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

感谢布拉德-一如既往的救世主。在晚上对它进行了修补之后,它做了我需要的一切,并且完全有意义。再次感谢。如何获得实时预览的大小?我在网上找不到任何东西来获取该值。