1. 函数定义
1.1 getDerivKernel
void getDerivKernels(
OutputArray kx,
OutputArray kx,
int dx,
int dy,
int ksize,
bool normalize = false,
int ktype = CV_32F
);
- kx和ky分别是1×ksize的行向量和ksize×1的列向量。(导数核Sobel和Scharr核是可以分解的,所以这个函数返回的是两个核)
- dx和dy是x,y方向求导的顺序。
- ksize是导数核的尺寸
- normalize:是否归一化,如果目标是一个浮点型图像,就应当将其设置为真,但如果目标是整数数组,就不能设置为真,以避免丢失精度。
- ktype :滤波器的类型,默认为是kx和ky的类型,它可以是CV_32f 或 CV_64F
1.2 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
评论(0)
您还未登录,请登录后发表或查看评论