OpenCV中的高通滤波

时间:2013-03-22 15:40:47

标签: opencv image-processing

要在OpenCV中制作3x3高通滤波器内核,我使用以下代码(适用于Android):

Mat kernel = new Mat(3, 3, CvType.CV_32FC1);
float[] data = {0, -1, 0, -1, 4, -1, 0, -1, 0};
kernel.put(0, 0, data);

然后我使用内核进行过滤:

Imgproc.filter2D(image, image, -1, kernel);

有没有办法在OpenCV中自动生成更大的高通内核?

2 个答案:

答案 0 :(得分:5)

opencv中实现了许多不同的高通滤波器。你为你的例子设置的那个是拉普拉斯:

0  1  0
1 -4  1
0  1  0

您可以使用具有ksize参数的opencv的Laplacian函数。您必须能够通过操纵该参数来应用更大的拉普拉斯内核。

如果您对其他高通滤波器感兴趣,opencv有Canny,Sobel等。

答案 1 :(得分:1)

虽然我将使用Safir的答案,但我确实找到了一个函数getDerivKernels(),它似乎可以自己生成内核矩阵,虽然仅适用于Sobel或Scharr滤波器,但仅限于特定大小。