opencv(7):OpenCV官方例程引导和赏析

本文详细介绍了OpenCV官方提供的cpp目录下的多个示例程序,包括彩色目标跟踪、光流分析、点追踪和人脸识别等应用场景。通过实例解析,帮助读者理解和学习OpenCV在计算机视觉领域的应用。

OpenCV作为一个在全球使用人数众多的计算机视觉库,其实官方己经准备了大量的示例程序,供广大初学者学习。
在安装目录下,可以找到OpenCV官方提供的示例代码。具体位于…\opencv\sources\samples\cpp目录下。
源码的存放目录为:
在这里插入图片描述
通过观察文件名可以发现,OpenCV官方提供了Android、C、CPP、GPU、Java、MacOSx、OCL、Python、Py山0n2、WinRT等众多版本的示例程序。不难理解,名为c的文件夹中存放着OpenCV1.0等旧版本的示例程序,而名为cpp的文件夹中存放着OpenCV2.x等新版本的示例程序。

本书旨在对新版本OpenCV的讲解,自然主要专注于cpp文件夹内的众多示例程序。打开该文件夹,可以发现100余个C++版本的OpenCV官方示例程序。在…\opencv\sources\samples\cpp\tutorialcode路径下,存放着和官方教程配套的示例程序。其内容按OpenCV各组件模块而分类,非常适合学习,大家可以按需查询,分类学习,各个击破。

  1. 彩色目标跟踪:Camshift
    本小节讲解的例程为彩色目标跟踪,程序的用法是根据鼠标框选区域的色度光谱来进行摄像头读入的视频目标的跟踪。其主要采用CamShift算法,全称是“Continuously Adaptive Mean-SHIFT”,是对MeanShift算法的改进,被称为连续自适应的MeanShift算法,在…\opencv\sources\samples\cpp目录下找到名为camshifidemo.cpp的文件,自行修改
    部分代码。实际路会因为Opencv版本的不同略有差异),编译并运行,用鼠标在窗口中框选要跟踪的区域,便可以得到如图所示运行截图。
    在这里插入图片描述
    在这里插入图片描述
  2. 光流:opticalflow
    光流(opticalflow)法是目前运动图像分析的重要方法。由Gibso于1950年首先提出。光流用来指定时变图像中模式的运动速度,因为当物体在运动时,在
    图像上对应点的亮度模式也在运动。这种图像亮度模式的表观运动(apparent motion)就是光流。光流表达了图像的变化,山于它包含了目标运动的信息,因
    此可被观察者用来确定目标的运动情况。
  3. 点追踪:lkdemo
    在…\opencv\sources\samples\cpp目录下(实际路径会因为OpenCV版本的不同略有差异)的lkdemo.cpp文件中,存放着这样一个精彩的例程。程序运行后,
    会自动启用摄像头,这时按键盘上的"r”键来启动自动点追踪,便可以看到如图所示的效果图以而我们在摄像头中移动物体,可以看到物体上的点随着物体
    一同移动。
    #include "opencv2/video/tracking.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/highgui/highgui.hpp"
    
    #include <iostream>
    #include <ctype.h>
    
    using namespace cv;
    using namespace std;
    
    static void help()
    {
         
         
    	// print a welcome message, and the OpenCV version
    	cout << "\nThis is a demo of Lukas-Kanade optical flow lkdemo(),\n"
    		"Using OpenCV version " << CV_VERSION << endl;
    	cout << "\nIt uses camera by default, but you can provide a path to video as an argument.\n";
    	cout << "\nHot keys: \n"
    		"\tESC - quit the program\n"
    		"\tr - auto-initialize tracking\n"
    		"\tc - delete all the points\n"
    		"\tn - switch the \"night\" mode on/off\n"
    		"To add/remove a feature point click it\n" << endl;
    }
    
    Point2f point;
    bool addRemovePt = false;
    
    static void onMouse(int event, int x, int y, int /*flags*/, void* /*param*/)
    {
         
         
    	if (event == CV_EVENT_LBUTTONDOWN)
    	{
         
         
    		point = Point2f((float)x, (float)y);
    		addRemovePt = true;
    	}
    }
    
    int <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值