Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.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 &引用;“内部”;使用CIImage进行(如边缘)检测?_Ios_Ciimage - Fatal编程技术网

Ios &引用;“内部”;使用CIImage进行(如边缘)检测?

Ios &引用;“内部”;使用CIImage进行(如边缘)检测?,ios,ciimage,Ios,Ciimage,我试图在街景图像中发现建筑物的轮廓。结果应该和你在海报上看到的相似,天空是白色的,建筑物是黑色的。这与典型的边缘检测不同,后者在整个图像中查找边缘 我试图通过增强图像的对比度来实现这一点,这样天空就会被完全冲淡。然后,我将使用CIFilter对结果执行边缘检测。我仍然认为这可能有效,但这对我来说是艰难的,我以前从未从事过图像处理 在我继续之前,有人知道这是一个预卷版本吗?好的,下面是我如何解决这个问题的 首先使用CIImage将其转换为灰度图像。我使用黑色,因为它似乎产生了一个更鲜明的形象 然后

我试图在街景图像中发现建筑物的轮廓。结果应该和你在海报上看到的相似,天空是白色的,建筑物是黑色的。这与典型的边缘检测不同,后者在整个图像中查找边缘

我试图通过增强图像的对比度来实现这一点,这样天空就会被完全冲淡。然后,我将使用CIFilter对结果执行边缘检测。我仍然认为这可能有效,但这对我来说是艰难的,我以前从未从事过图像处理


在我继续之前,有人知道这是一个预卷版本吗?

好的,下面是我如何解决这个问题的

首先使用CIImage将其转换为灰度图像。我使用黑色,因为它似乎产生了一个更鲜明的形象

然后我应用了第二个过滤器将对比度提高到5


结果是一个纯黑白图像,黑色像素是内部。

刚刚偶然发现了您的问题

首先让我介绍一下我喜欢的方法,如果我使用苹果公司提供的过滤器的话

苹果在“xCode图形工具”中捆绑了某些图形工具-请在以下文档中查找:

如果你找到了,就去找“石英作曲家”。 请在此处使用此精彩的介绍:

这就是你所需要的所有过滤器链(由苹果提供),所以你得到最好的你的图像后处理。 我喜欢这种方法,因为它比在代码重新编译、构建和运行中使用过滤器参数要快得多

当你得到一个好的结果,你很高兴,翻译过滤器(设置参数)到代码等瞧。你们都准备好了

现在回到你的基本想法。对图像进行对比度增强和最终边缘检测。这就是它的样子(不要在参数上纠缠我)

CIImage *outputImage = ciImage;
// Your Idea to enhance contrast.
CIFilter *ciColorMonochrome = [CIFilter filterWithName:@"CIColorMonochrome"];
[ciColorMonochrome setValue:outputImage forKey:kCIInputImageKey];
[ciColorMonochrome setValue:@(1) forKey:@"inputIntensity"];
[ciColorMonochrome setValue:[[CIColor alloc] initWithColor:[UIColor whiteColor]] forKey:@"inputColor"];// Black and white
outputImage = [ciColorMonochrome valueForKey:kCIOutputImageKey];

// Now go on with edge detection
CIImage *result = [filter valueForKey:kCIOutputImageKey];
CIFilter *ciEdges = [CIFilter filterWithName:@"CIEdges"];
[ciEdges setValue:outputImage forKey:kCIInputImageKey];
[ciEdges setValue:@(5) forKey:@"inputIntensity"];
outputImage = [ciEdges valueForKey:kCIOutputImageKey];