openCV 程序实例

图片

第一个程序 图片展示

把一张图片命名为 “1.jpg” 放进项目文件下

openCV 程序实例_第1张图片

#include
#include"opencv2/opencv.hpp"
using namespace cv;
using namespace std;

int main()
{
	Mat srcImage = imread("1.jpg");//载入图像
	imshow("【原始图】", srcImage);//显示图像
	waitKey(0);//等待任意键按下

	return 0;
}

openCV 程序实例_第2张图片


第二个程序 图片腐蚀

#include
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;


int main()
{
	Mat srcImage = imread("1.jpg");//载入图像
	imshow("【原始图】", srcImage);//显示图像
	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstImage;
	erode(srcImage, dstImage, element);//显示效果图
	imshow("【腐蚀】", dstImage);//显示图像

	waitKey(0);//等待任意键按下

	return 0;
}

程序首先依然是载入和显示一幅图像,然后定义一个Mat类型的变量来获得 getStructuringElement函数的返回值,而getStructuringElement函数的返回值为指 定形状和尺寸的结构元素(内核矩阵)。参数准备完毕,接着便可以调用erode函 数进行图像腐蚀操作,最后调用imshow函数进行显示,用waitKey函数等待按键 按下,以便能让窗口一直显示,
openCV 程序实例_第3张图片


第三个程序 图像模糊

#include
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;

int main()
{
	Mat srcImage = imread("1.jpg");//载入图像
	imshow("【原始图】", srcImage);//显示图像
	Mat dstImage;
	blur(srcImage, dstImage, Size(7, 7));//进行均值滤波(模糊)操作

	imshow("【均值滤波】", dstImage);//显示图像
	waitKey(0);//等待任意键按下

	return 0;
}

openCV 程序实例_第4张图片


canny 边缘检测

载入图像,并将其转换成灰度图。用blur函数进行图像模糊以降噪,再用Canny函数进行边缘检测。最后显示。

#include
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
	Mat srcImage = imread("1.jpg");//载入图像
	imshow("【原始图】Canny边缘检测", srcImage);//显示原始图
	Mat dstImage,edge,grayImage;//参数定义
	dstImage.create(srcImage.size(), srcImage.type());//创建与src同类型和大小的矩阵(dst)
	cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);//将原图像转换为灰度图像(此代码openCV2与openCV3不同,此处为openCV3)
	blur(grayImage, edge, Size(3, 3));//使用3x3内核来降噪
	Canny(edge, edge, 3, 9, 3);//运行Canny算子
	
	imshow("【效果图】Canny边缘检测", edge);//显示图像
	waitKey(0);//等待任意键按下

	return 0;
}


暂时暂停图片处理 后面开始学习视频的处理


视频

文件视频的读取和显示

将视频命名为“test.mp4",放在项目文件下
openCV 程序实例_第5张图片

VideoCapture 类负责视频的读取,使用重载的输出运算符 “>>” 可以很方便地从文件中读取一帧图像。
在 VideoCapture 初始化的时候,会预先读入需要的视频信息,例如视频大小、格式、分辨率等。由于OpenCV3对视频的处理使用ffmepg开源项目,因此只要是ffmpeg支持的视频格式类型VideoCapture类就可以正常操作 。
视频读取流程为: 文件 -> 文件信息读取 -> 【 逐帧读取 -> ffmpeg 解码 -> 显示 】(此处循环)
视频显示:
使用for循环读取和显示视频,当视频读取完毕或者用户有键盘输入时,读取循环结束。在每帧读取显示完毕后延迟 33ms ,这主要是用于视频的帧控制 ,如果不做帧控制则视频文件会很快被读取完,显示的视频也是相当快速的。

#include
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
	VideoCapture cap;
	cap.open("test.mp4");//将"test.mp4"换成 0 为调用摄像头采集图像cap.open(0);
	if (!cap.isOpened())
		return -1;
	namedWindow("OpenCV3", WINDOW_AUTOSIZE);
	Mat frame;
	for (;;)
	{
		cap >> frame;
		if (frame.empty())
			break;
		imshow("OpenCV3", frame);
		if (waitKey(33) >= 0)//在每帧读取显示完毕后延迟 33ms
			break;
	}
	waitKey(0);//等待任意键按下
	destroyWindow("OpenCV3");
	return 0;
}


对视频帧的简单处理

已经可以实现读取和显示视频了。
现在在视频显示之前对每帧进行简单处理

#include
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
	VideoCapture cap;
	cap.open("test.mp4");
	if (!cap.isOpened())
		return -1;

	namedWindow("OpenCV3-In", WINDOW_AUTOSIZE);//WINDOW_NORMAL可以自由放缩窗口大小
	namedWindow("OpenCV3-Out", WINDOW_NORMAL);//WINDOW_AUTOSIZE 窗口大小固定 
	Mat frame;
	for (;;)
	{
		cap >> frame;
		if (frame.empty())
			break;
		Mat out;

		//GaussianBlur(frame, out, Size(5, 5), 3, 3);//		高斯滤波 Size(5,5) 用于产生高斯滤波的模板,一般模板尺寸为奇数
		//pyrDown(frame, out); //图像金字塔下采样 将视频大小(长、宽)变为原来的一半
		 // Canny边缘检测
		 //Mat gray;
		 //cvtColor(frame, gray, cv::COLOR_BGR2GRAY);
		 //cv::Canny(gray, out, 10, 100, 3, true);
		imshow("OpenCV3-In", frame);
		imshow("OpenCV3-Out", out);
		if (waitKey(33) >= 0)
			break;

	}
	destroyWindow("OpenCV3");
	return 0;
}

高斯滤波

Canny 边缘检测


你可能感兴趣的:(openCV)