3

为了在 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 中自动生成更大的高通内核?

4

2 回答 2

6

在 opencv 中实现了许多不同的高通滤波器。您为示例设置的是拉普拉斯算子:

0  1  0
1 -4  1
0  1  0

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

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

于 2013-03-22T17:23:03.783 回答
1

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

于 2013-03-22T21:42:35.240 回答