16-自定义线型滤波

自定义线性滤波

1、卷积概念;
2、常见算子;
3、自定义卷积模糊;
4、代码演示;

卷积

1、图像卷积操作可以模糊图像, 降低一幅图像的噪声(降噪);
2、卷积是图像处理中的一个操作,是kernel(卷积核)在图像的每个像素上的操作,Kernel本质上是一个固定大小的矩阵数组,其中心点称为锚点(anchor point)
3、卷积计算方法:卷积核与图像矩阵依次相乘,取平均值作为锚点覆盖下像素点的像素值;从左到右,从上到下,依次做卷积,完成对整幅图像的卷积操作;

4、卷积的三个作用:①模糊图像;②提取边缘;③图像增显(锐化)

常见卷积算子(常见卷积核)

Robert算子:2*2算子

Sobel算子:边缘检测中常用

拉普拉斯算子:边缘检测中常用

自定义卷积模糊

-1 默认与原图一样,卷积核一般奇数

Code

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
   
	Mat src, dst;
	
	
	src = imread("C:\\Users\\hello\\Desktop\\1.jpg");
	if (!src.data)
	{
   
		cout << "could not load the image..." << endl;
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);
	char OUTPUT_WIN[] = "Robert X";
	namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);

	//X方向 Robert算子
	Mat robert_x = (Mat_<int>(2, 2) << 1, 0, 0, -1);  //一个2 * 2的矩阵
	filter2D(src, dst, -1, robert_x, Point(-1, -1));
	imshow(OUTPUT_WIN, dst);
	//Y方向 Robert算子
	Mat ying;
	Mat robert_y = (Mat_<int>(2, 2) << 0, 1, -1, 0);  //一个2 * 2的矩阵
	filter2D(src, ying, -1, robert_y, Point(-1, -1));
	imshow("Robert Y", ying);

	//Sobel算子
	Mat sx, sy;
	Mat Sobel_X = (Mat_<int>(3, 3) << -1, 0, 1, -2, 0, 2, -1, 0, 1); //1个3 * 3 矩阵 体现X方向差异
	Mat Sobel_Y = (Mat_<int>(3, 3) << -1, -2, -1, 0, 0, 0, 1, 2, 1); //1个3 * 3 矩阵 体现Y方向差异
	filter2D(src, sx, -1, Sobel_X, Point(-1, -1));
	filter2D(src, sy, -1, Sobel_Y);
	imshow("sobel x", sx);
	imshow("sobel y", sy);

	//Laplace算子:边缘检测算子,可以得到图像的整个差异 4个0的laplace算子,还有其他的
	//获取轮廓后还可以进一步处理得到更清晰的图像;
	Mat kernel_l = (Mat_<int>(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);
	Mat ml;
	filter2D(src, ml, -1, kernel_l, Point(-1, -1));
	imshow("laplace image", ml);

	//自定义卷积核
	int c = 0;
	int index = 0;
	int ksize = 3;
	Mat dd;
	while (true)
	{
   
		c = waitKey(500); //每隔500ms模糊一次;
		if ((char)c == 27) //ESC
		{
   
			break;
		}
		ksize = 4 + (index % 8) * 2 + 1 ;
		Mat kernel = Mat::ones(Size(ksize, ksize), CV_32F) / (float)(ksize * ksize); //得到一个ksize 
		filter2D(src, dd, -1, kernel, Point(-1, -1));
		index++;
		imshow("Custom Blur Filter Result", dd);
	}
	waitKey(0);
	return 0;
}

Consequence

效果图:

全部评论

相关推荐

点赞 评论 收藏
分享
吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务