opencv学习日记(一)

一、opencv的安装

关于opencv的安装,本人在此就不再赘述了,网上相关教程很多,我个人比较推荐以下博主
链接:https://blog.csdn.net/qq_41175905/article/details/80560429
安装过程真的很详细(虽然我是看了其他博主的安装过程,但还是强烈推荐该博主),由于我用的是VS2017,部分同学可能采用VS2015或其他版本,但安装过程大同小异,只要细心安装,相信大家都可以快速的使用opencv。

二、图像处理基本函数

图像处理以前学过,但是学的是matlab,没有学opencv。由于日后的研究方向可能为图像处理方向,而opencv作为其中的主流,自然是必须要学习的。

1、图像的输入输出

代码如下
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgcodecs/imgcodecs.hpp>
//命名空间cv 表明以下特殊函数例如imread在cv空间中存在 避免cv::imread的繁琐书写
using namespace cv;
int main()
{
	//Mat opencv中特殊的类 由两部分组成矩阵头和指针
	//imread注意路径格式
	Mat Image = imread("F:\\大四上\\opencv\\dome.jpg");
	//imshow显示图片 参数一为图片名 参数二为要显示的图片变量
	imshow("Original Image", Image);
	//在imshow后若没有waitkey则不显示图片 参数为0代表无限等待 为1代表1ms
	waitKey(0);
	return 0;
}
输出如下

在这里插入图片描述基本的输入输出imread、imshow与matlab并无区别,但命名空间cv与独特的变量类型Mat还是说明了VS与matlab的些许不同。

2、图像腐蚀

作为基本的形态学操作之一,腐蚀可以消除图像中的噪声点,采用不同的结构元素,可以滤除掉不同的噪声。

代码如下
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgcodecs/imgcodecs.hpp>
#include<opencv2/imgproc.hpp>

using namespace cv;
int main()
{
  Mat Image = imread("F:\\大四上\\opencv\\Caitlyn.jpg");
  imshow("Original Image", Image);
  //生成结构元素 第一个参数为结构元素的类别 第二个参数为尺寸
  Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
  Mat dstImage;
  //腐蚀函数 三个参数依次为原图像 腐蚀图像 结构元素
  erode(Image, dstImage, element);
  imshow("Image Erosion", dstImage);
  waitKey(0);
  return 0; 
}
输出如下

在这里插入图片描述

3、图像模糊

图像模糊,对图像采取不同的滤波手段以得到想要的信息。常用的滤波手段有,均值滤波,高斯滤波,中值滤波,双边滤波等,本示例采用中值滤波进行演示。

代码如下
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/imgproc.hpp>

using namespace cv;

int main()
{
  Mat Image = imread("F:\\大四上\\opencv\\dome.jpg");
  imshow("Origial Image", Image);
  Mat dstImage;
  //对原图像采用均值滤波后输出
  blur(Image, dstImage, Size(7, 7));
  imshow("Image Blurring", dstImage);
  waitKey(0);
  return 0;
}
输出如下

在这里插入图片描述

4、边缘检测

对图像进行滤波、边缘增强后,采用边缘检测算子可得到图像边缘。常用的一阶算子有Roberts Cross算子,Prewitt算子,Sobel算子,常用的二阶算子有Canny算子,Laplacian算子等。本示例采用Canny算子

代码如下
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/imgproc.hpp>

using namespace cv;

int main()
{
   Mat Image = imread("F:\\大四上\\opencv\\dome.jpg");
   imshow("Original Image", Image);
   Mat dstImage, edge, grayImage;
   //构造与Image大小相同 类型相同的变量dstImage
   dstImage.create(Image.size(), Image.type());
   //将Image变为灰度图像grayImage
   cvtColor(Image, grayImage, COLOR_BGR2GRAY);
   //对dstImage进行模糊处理
   blur(Image, dstImage, Size(3, 3));
   //参数一为输入图像,二为输出图像,三为阈值一,四为阈值二,五为算子大小
   Canny(dstImage, edge, 3, 9, 3);
   imshow("Canny Edge Deteection", edge);
   waitKey(0);
   return 0;
}
输出如下

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值