初识OpenCV

OpenCV入门

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby,GO的支持。

配置OpenCV环境

OpenCV配置方法参考另一篇博主的文章 openCV 3 与vs2017 环境配置
我使用的是OpenCV 3 与 vs2017的组合

OpenCV

本文使用的是c++语言
先做一个小测试输出原图的灰度图像

	include<opencv2/opencv.hpp>
	using namespace std;
	using namespace cv;
	
	#define PI 3.1415926
	
	Mat src = imread("C:/Users/hdc/Desktop/icon1.jpg", 1);
	cvtColor(src, src, COLOR_BGR2GRAY);
	namedWindow("src", WINDOW_AUTOSIZE);
	imshow("src", src);
	waitKey(0);

在这里插入图片描述
用基础思路来写高斯模糊,先介绍一下最基本的思路: 卷积!!!!!!!

卷积 Convolution

具体内容参考:https://blog.csdn.net/xylin1012/article/details/81807553

下面开始写高斯模糊
自己实现5X5卷积核

	include<opencv2/opencv.hpp>
	using namespace std;
	using namespace cv;
	
	#define PI 3.1415926
	
	Mat src = imread("C:/Users/hdc/Desktop/icon1.jpg", 1);
	cvtColor(src, src, COLOR_BGR2GRAY);
	namedWindow("src", WINDOW_AUTOSIZE);
	imshow("src", src);
	
//5X5卷积模板

	Mat model = Mat(5, 5, CV_64FC1);

	double sigma = 80;
	for (int i = -2; i <= 2; i++) {
		for (int j = -2; j <= 2; j++) {
			model.at<double>(i + 2, j + 2) = exp(-(i*i + j * j) / (2 * sigma*sigma)) / (2 * PI *sigma*sigma);

		}
	}

	double gaussSum = 0;
	gaussSum = sum(model).val[0];
	//卷积核的和

	for (int i = 0; i < model.rows; i++) {
		for (int j = 0; j < 5; j++) {
			model.at<double>(i, j) = model.at<double>(i, j) / gaussSum;
		}

	}
	Mat dst = Mat(src.rows - 4, src.cols - 4, CV_8UC1);
	for (int i = 2; i < src.rows - 2; i++) {
		for (int j = 2; j < src.cols - 2; j++) {
			double sum = 0;
			for (int m = 0; m < model.rows; m++) {
				for (int n = 0; n < model.cols; n++) {
					sum += (double)src.at<uchar>(i + m - 2, j + n - 2)*model.at<double>(m, n);
				}
			}
			dst.at<uchar>(i - 2, j - 2) = (uchar)sum;
		}
	}
	namedWindow("gaussBlur", WINDOW_AUTOSIZE);
	imshow("asd", dst);
	waitKey(0);

效果图
在这里插入图片描述
OpenCV中封装了很多函数来实现各种需求,同样也封装了高斯模糊的函数

	include<opencv2/opencv.hpp>
	using namespace std;
	using namespace cv;
	
	#define PI 3.1415926
	
	Mat src = imread("C:/Users/hdc/Desktop/icon1.jpg", 1);
	cvtColor(src, src, COLOR_BGR2GRAY);
	namedWindow("src", WINDOW_AUTOSIZE);
	imshow("src", src);
	
	Mat dst = src.clone();
	GaussianBlur(src, dst, Size(15, 15), 180);	
	namedWindow("gaussBlur", WINDOW_AUTOSIZE);
	
	imshow("asd", dst);
	waitKey(0);

效果图:
在这里插入图片描述
可以通过卷积核的大小和卷积核的种类来调整高斯模糊的程度
拓展:卷积及卷积算子(convolution)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值