opencv学习笔记(十六)自定义线性滤波

1.图像中的卷积概念

卷积:图像处理中一个操作,是kernel在图像的每个像素上的操作。Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point)。把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。前面笔记中的掩膜操作本质就是进行卷积处理。

2.常见算子(kernel)

(1)Robert算子

(2)Sobel算子(一阶导):增强水平垂直之间像素跃迁的差距,进行卷积处理时,如果调用API,算子将旋转180度进行计算

(3)Laplacian算子(二阶导)

3.简单代码实现

#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace std;
using namespace cv;

char inputName[] = "input name";
char outputName[] = "output name";
int main()
{
	Mat src, dst;
	src = imread("D:/VS project/Image/people.jpg");
	if (src.empty())
	{
		cout << "找不到图像!" << endl;
		return -1;
	}
	namedWindow(inputName, CV_WINDOW_AUTOSIZE);
	namedWindow(outputName, CV_WINDOW_AUTOSIZE);
	imshow(inputName, src);
	//Robert算子X方向
	Mat kernelX = (Mat_<int>(2, 2) << 1, 0, 0, -1);
	/*Mat kernelX = (Mat_<int>(3, 3) << -1, 0, 1, -2,0,2,-1,0,1);*///Sobel算子x方向
	filter2D(src, dst, src.depth(), kernelX, Point(-1, -1), 0.0);
	imshow("x", dst);
	//Robert算子Y方向
	Mat y;
	Mat kernelY = (Mat_<int>(2, 2) << 0, 1, -1, 0);
	filter2D(src, y, src.depth(), kernelY, Point(-1, -1), 0.0);
	imshow("y", y);

	waitKey(0);
	return 0;


}

4.运行结果

发布了53 篇原创文章 · 获赞 9 · 访问量 3285

猜你喜欢

转载自blog.csdn.net/weixin_41039168/article/details/96105841
今日推荐