1. 函数定义

1.1 getDerivKernel

OpenCV官方文档getDerivKernel

	void getDerivKernels(
		OutputArray kx, 
		OutputArray kx,
		int dx, 
		int dy, 
		int ksize,
		bool normalize = false, 
		int ktype = CV_32F
		);
  • kxky分别是1×ksize的行向量和ksize×1的列向量。(导数核Sobel和Scharr核是可以分解的,所以这个函数返回的是两个核)
  • dxdy是x,y方向求导的顺序。
  • ksize是导数核的尺寸
  • normalize:是否归一化,如果目标是一个浮点型图像,就应当将其设置为真,但如果目标是整数数组,就不能设置为真,以避免丢失精度。
  • ktype :滤波器的类型,默认为是kxky的类型,它可以是CV_32f 或 CV_64F

1.2 getGaussianKernel

OpenCV官方文档getGaussianKernel

	Mat getGaussianKernel(
		int ksize, 
		double sigma, 
		int ktype = CV_64F
		);
  • 函数计算并返回 ksize×1 高斯核。
  • ksize:高斯核的尺寸,必须是正奇数。
  • sigma: 近似高斯分布的标准差,如果不是正数,它将依据 sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8 计算出来

2. 例程

#include "stdafx.h"
#include <opencv.hpp>
using namespace cv;

int main()
{
	Mat m_SrcImg = imread("./1.bmp", IMREAD_GRAYSCALE);
	imshow("原图", m_SrcImg);

	Mat m_DstImg;

	Sobel(m_SrcImg, m_DstImg, m_SrcImg.depth(), 1, 0, 3);
	imshow("Sobel x", m_DstImg);

	Mat kx, ky;
	getDerivKernels(kx, ky, 1, 0, 3, false);
	sepFilter2D(m_SrcImg, m_DstImg, m_SrcImg.depth(), kx, ky);
	imshow("sepFilter2D", m_DstImg);
	
	waitKey(0);
    return 0;
}

在这里插入图片描述


 转载自:https://liuhui.blog.csdn.net/article/details/121778260