邂逅视觉技术

简单的介绍几个概念的区别:

*图像处理:计算机对图像进行分析、处理以达到所需结果。侧重于处理图像(增强、还原、降噪、分割等)。

*计算机视觉:让机器学会“看”的视觉技术。这里的看包含了:目标识别、跟踪、测量等。侧重于使用计算机,让机器拥有人的视觉。

*opencv:是一个包含了图像处理和计算机视觉技术的开源函数库。

至于opencv的概述和发展起源就不再细说,大致了解就行。应用的话有人机交互、物体识别、图像分区、人脸识别、动作识别、运动跟踪、机器人。opencv的基本构架(也可以理解为opencv有哪些功能),三维标定、核心模块(基本数据结构、动态数据结构、数组操作相关函数、辅助功能与系统函数和宏、与opengl的互相操作)、图像处理模块、特征检测模块、flann(快速近似最邻近搜索、聚类)、GPU加速模块、高层用户界面模块、机器学习模块、目标检测模块、图像拼接模块、视频模块。

下载可以到官网进行下载,环境配置的话第一步是设置环境变量,就是告诉计算机你的opencv安装在哪里,第二步头文件包含,第三步是加入库目录,第四步是静态库的连接。

下面是一个综合的示例,程序并不是很长,实现的效果是从摄像头读取视频,检测并显示边缘。

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	VideoCapture vidsrc;//VideoCapture 是一个封装好的类,该类像Mat一样,Mat是用来存放图像的类,VideoCapture是用来存放视频的类。
	vidsrc.open(0);//open是VideoCapture这个类里面的方法,参数0表示从摄像头读取视频,如果参数是指定视频的路径,则读取指定的视频。

	Mat edgs;//定义一个变量来存储检测出来的边缘
	//使用死循环将视频的每一帧输入到frame中
	while (1) {
		Mat frame;//定义一个变量来存储视频的每一帧
		vidsrc >> frame;//将每一帧输入到变量frame中
		cvtColor(frame,edgs,COLOR_BGR2GRAY);//将颜色转变为灰色
		blur(edgs, edgs, Size(7, 7));//均值模糊处理(目的是降低图像的噪声)
		Canny(edgs, edgs, 20,50, 3);//使用Canny进行边缘检测
		imshow("cnnny edgs", edgs);//输出显示检测结果
        //每一帧图像延时10ms(因为等待10毫秒后就跳出if语句,进行下一次while循环,要不就没有时间显示检测结果)
		if (waitKey(10) >= 0) {
			break;
		}
	}
	return 0;
}

程序的结构主要是遵循canny边缘检测的原理来设定,首先获取原图像,然后转换为单通道灰度图像,然后进行模糊处理,最后调用canny进行边缘检测,然后输出检测结果。额外的知识点是从摄像头读取视频(是用定义好的类,然后调用类里面的方法就可以读取了。如果要显示视频的话也是使用死循环显示每一帧的图像,组合成一段视频。),将视频输入到每一帧中(使用死循环)。

在这个综合示例中个人觉得最需要注意的是在使用canny时如何搭建程序流程,这点从canny的原理入手很好解释,首先获取源图像就不用说了,将图形转换为单通道的灰度图像是因为canny的输入需要时单通道的灰度图像。之所以在模糊之前进行灰度转化这也是考虑到程序的运行效率,对单通道图像进行模糊比对三通道图像进行模糊的计算量要小一些。模糊是为了消除图像中的噪声点,因为canny是基于梯度变化检测边界的函数,所以噪声点会对检测结果有很大的影响。总结以上:使用canny时,1转灰度,2模糊,3才canny。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值