OpenCV学习之路(三) OpenCV快速上手之简单的图像处理及视频操作

目录

 

1.图像显示

2.图像腐蚀

3.图像模糊

4.canny边缘检测

5.读取并播放视频

 


1.图像显示

新版本的OpenCV中,图像现实过程非常简单,只需用 imread 函数载入到新版本的图像存储数据结构 Mat 类中,然后使用 imshow 函数显示即可。本文使用的是VS2017编辑器,OpenCV3.4,新建控制台应用程序后,新建一个.cpp文件,添加如下代码:

#include<opencv2/opencv.hpp>

using namespace cv;

int main()
{
	Mat srcImage = imread("pic.jpg");
	imshow("原始图像", srcImage);
	waitKey(0);

	return 0;
}

其中,#include<opencv2/opencv.hpp> 一句为OpenCV头文件的包含,using namespace cv 为命名空间的包含。

接着读取并显示图片,最后调用waitKey函数使图片窗口一直显示知道用户按下按键。即可显示图片

2.图像腐蚀

腐蚀是最基本的形态学运算之一,即用图像中的暗色部分“腐蚀”掉图像中的高亮部分。同样新建项目,新建源文件,放置名为cat.jpg 的图片到cpp源文件同一目录下。代码如下:

#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main()
{
	Mat srcImage, dstImage;
	srcImage = imread("cat.jpg");
	imshow("原图像", srcImage);
	Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
	erode(srcImage, dstImage, element);
	imshow("腐蚀操作后的图像", dstImage);

	waitKey(0);

	return 0;

}

首先,使用#include 分别包含OpenCV的 highgui 模块头文件和 图像处理模块头文件,接着读入并显示原图像。然后定义一个Mat 类型的变量来获得getStructuringElement 函数的返回值,该函数返回值为指定形状和尺寸的结构元素(内核矩阵)。接着便使用 erode 函数来进行腐蚀操作。原图和进行腐蚀操作后的效果图如下所示:

3.图像模糊

简单看一下使用OpenCV 对图像进行均值滤波操作来对其进行模糊处理。代码如下所示:

#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main()
{
	Mat srcImage, dstImage;
	srcImage = imread("cat.jpg");
	imshow("原图像", srcImage);
	blur(srcImage, dstImage, Size(5, 5));
	imshow("均值滤波后的图像", dstImage);

	waitKey(0);
	return 0;
}

blur 函数对载入图像进行均值滤波已达到模糊图像的目的。可以进行图像噪声的处理。

原图及均值滤波模糊后的效果图如下:

4.canny边缘检测

边缘检测也是图像处理中经常用到的部分。载入原图像,并将其转成灰度图,再用blur函数进行模糊处理以降噪,然后使用canny函数进行边缘检测。代码如下:

#include<opencv2/opencv.hpp>

using namespace cv;

int main()
{
	Mat srcImage, dstImage;
	srcImage = imread("cat.jpg");
	imshow("原图像", srcImage);
	cvtColor(srcImage, dstImage, CV_BGR2GRAY);
	blur(dstImage, dstImage, Size(3, 3));
	Canny(dstImage, dstImage, 3, 9, 3);
	imshow("边缘检测后的效果图", dstImage);

	waitKey(0);
	return 0;
}

原图及Canny边缘检测后的效果图如下所示:

5.读取并播放视频

VideoCapture 是 OpenCV 2.X 中新增的一个类,对应于之前C 语言版本的CvCapture 结构体。它提供了从摄像机或视频文件中捕获视频的 C++ 接口。

读取视频文件代码如下:

#include<opencv2/opencv.hpp>

using namespace cv;

int main()
{
	VideoCapture capture;
	capture.open("demo.avi");

	//VideoCapture capture("demo.avi");

	while (1)
	{
		//定义一个Mat 变量,用于存储每一帧的图像
		Mat frame;
		//读取当前帧
		capture >> frame;

		//若视频播放完成,退出循环
		if (frame.empty())
			break;

		//显示当前帧
		imshow("读取视频", frame);
		//延迟30ms
		waitKey(30);
	}

	return 0;
}

读取摄像头视频图像代码如下:

#include<opencv2/opencv.hpp>

using namespace cv;

int main()
{
	VideoCapture capture(0);

	while (1)
	{
		//定义一个Mat 变量,用于存储每一帧的图像
		Mat frame;
		//读取当前帧
		capture >> frame;

		//若视频播放完成,退出循环
		if (frame.empty())
			break;

		//显示当前帧
		imshow("读取视频", frame);
		//延迟30ms
		waitKey(30);
	}

	return 0;
}

 

      

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值