我想在Opencv API中实现GPUImage Framework过滤器。我在IOS中知道GPUImage sketchfilter。但是我想使用Opencv API在windows平台上实现GPUImage过滤器。
我的输入图片
这里我想得到输出图像
我如何获得上面的输出图像。?
是否有任何opencv API来获取结果图像。?
请帮助并提出任何建议。?
答案 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。