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

时间:2014-07-31 06:30:50

标签: c++ c windows opencv

我想在Opencv API中实现GPUImage Framework过滤器。我在IOS中知道GPUImage sketchfilter。但是我想使用Opencv API在windows平台上实现GPUImage过滤器。

我的输入图片

My Input image

这里我想得到输出图像

enter image description here

我如何获得上面的输出图像。?

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

请帮助并提出任何建议。?

2 个答案:

答案 0 :(得分:2)

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

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


如果您对提供的探测器不满意(应该不仅仅是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;

然而,简单地使用一些内核并使用它来实现许多不同的过滤器(模糊,边缘检测等)更为常见。

更多详情可在Image Filtering (Filter2D)下找到。

一个简单的边缘检测器可以使用这样的内核:

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

答案 1 :(得分:0)

这看起来像Sobel边缘检测。由于您希望使用OpenCV在GPU中进行here is the relevant function