要在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中自动生成更大的高通内核?
答案 0 :(得分:5)
opencv中实现了许多不同的高通滤波器。你为你的例子设置的那个是拉普拉斯:
0 1 0
1 -4 1
0 1 0
您可以使用具有ksize
参数的opencv的Laplacian
函数。您必须能够通过操纵该参数来应用更大的拉普拉斯内核。
如果您对其他高通滤波器感兴趣,opencv有Canny,Sobel等。
答案 1 :(得分:1)
虽然我将使用Safir的答案,但我确实找到了一个函数getDerivKernels(),它似乎可以自己生成内核矩阵,虽然仅适用于Sobel或Scharr滤波器,但仅限于特定大小。