Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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
C++ 如何在Opencv API中实现GPUImage过滤器?_C++_C_Windows_Opencv - Fatal编程技术网

C++ 如何在Opencv API中实现GPUImage过滤器?

C++ 如何在Opencv API中实现GPUImage过滤器?,c++,c,windows,opencv,C++,C,Windows,Opencv,我想在Opencv API中实现GPUImage框架过滤器。我知道IOS中的GPUImage sketchfilter。但我想在windows平台中使用Opencv API实现GPUImage过滤器 下面是我的输入图像 在这里我想得到下面的输出图像 如何获得以上输出图像 是否有任何opencv API来获取结果图像 请提供帮助和建议。?您正在寻找的是边缘检测器,如 这将使边缘返回为暗线,对比度越强,边缘越暗 如果您对提供的检测器不满意(应该不仅仅是Canny,但老实说,我已经多年没有使用O

我想在Opencv API中实现GPUImage框架过滤器。我知道IOS中的GPUImage sketchfilter。但我想在windows平台中使用Opencv API实现GPUImage过滤器

下面是我的输入图像

在这里我想得到下面的输出图像

如何获得以上输出图像

是否有任何opencv API来获取结果图像


请提供帮助和建议。?

您正在寻找的是边缘检测器,如

这将使边缘返回为暗线,对比度越强,边缘越暗


如果您对提供的检测器不满意(应该不仅仅是Canny,但老实说,我已经多年没有使用OpenCV了),您可以实现自己的边缘检测:

output[y * stride + x] = std::abs(input[y * stride + x] - input[y * stride + x + 1]);
此示例将查找所有垂直边,而不使用任何阈值

横向版本与之类似:

output[y * stride + x] = std::abs(input[y * stride + x] - input[(y + 1) * stride + x]);
或两者兼而有之:

output[y * stride + x] = ((std::abs(input[y * stride + x] - input[y * stride + x + 1]) + std::abs(input[y * stride + x] - input[(y + 1) * stride + x]))) / 2;
然而,更常见的是简单地使用一些内核并使用它来实现许多不同的过滤器(模糊、边缘检测等)

有关更多详细信息,请参见

简单的边缘检测器可以使用如下内核:

    |  0 -1  0 |
K = | -1  0  1 |
    |  0  1  0 |

这看起来像索贝尔边缘检测。由于您希望使用OpenCV在GPU中执行此操作,.

谢谢您的回复。但是Canny edge detection使用阈值执行。但是我需要在不使用阈值的情况下获得输出。@2vision2使用更简单的算法更新了答案。谢谢您的回答。您能在代码中解释“跨步”吗。?这是垫子吗?谢谢你的回答。但它画的是垂直线和水平线。如何只画边缘的外线?你的意思是想减少噪音?如果是这样,这就是阈值发挥作用的地方(比如在颜色值低于
x
的情况下删除所有内容)。这在iOS中不可用,因为gpu仅在nVidia CUDA图形卡上启用。