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

目录

 

1.图像显示

2.图像腐蚀

3.图像模糊

4.canny边缘检测

5.读取并播放视频

 


1.图像显示

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

#include

using namespace cv;

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

	return 0;
}

其中,#include 一句为OpenCV头文件的包含,using namespace cv 为命名空间的包含。

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

2.图像腐蚀

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

#include
#include

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 函数来进行腐蚀操作。原图和进行腐蚀操作后的效果图如下所示:

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

3.图像模糊

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

#include
#include

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 函数对载入图像进行均值滤波已达到模糊图像的目的。可以进行图像噪声的处理。

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

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

4.canny边缘检测

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

#include

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边缘检测后的效果图如下所示:

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

5.读取并播放视频

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

读取视频文件代码如下:

#include

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

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;
}

 

      

你可能感兴趣的:(OpenCV,学习)