CCV入门教程(三)

时间:2022-02-17 04:50:20

 

梁登的csdn技术博客

3.2 CCV视频处理流程

从“2.1 滤波部分相应的代码”并且结合CCV运行界面(附录二)可以看出,CCV处理视频得到触点的流程是

a) 背景提取

当跟踪到的图像中没有看到手指头时,按下“背景移除按钮”获取背景;如果环境中光线变化常常变化,还需要打开“动态提取”开关。

b) 平滑

平滑是为了除去噪声干扰(图像去噪),是触点提取过程更加稳定,用专业术语来说是鲁棒性更高(robustness)。

c) 高通滤波

高通滤波是从手的影像中再提取出指头的关键步骤

        注:为什么高通滤波可以把手指从手的影像中分割出来?

这是由手所成的像的特征决定的(手指头清晰,其他部分与背景的界限模糊,所以高频信息集中在手指部分)

d) 幅度增强

幅度增强是为了使手指头部分更明显(图像增强)

e) 阈值二值化

不断调整阀值,直到最后得到的跟踪图像(tracked image)中,只能看到手指头,而且没有虚假触点存在。参数选择影响最终触点提取的精确度,触点过大影响触点的定位

4CCV参数的设置以及进一步讨论

a) Threshold Slider: 调整追踪点的像素范围(大小)。只有大于这个阈值的点才会被转换成一个追踪点。

b) Min Blob Size: 调整可以接受的最小点大小。只有大于这个值,一个点才会被分配一个ID

c) Max Blob Size: 调整可以接受的最大的点大小。当一个点的大小大于这个值后将失去被分配的ID。将重新选择点。

d) Smooth Slider: 平滑图像并且从图像中过滤噪音

e) Highpass Blur Slider:移除图像中模糊的部分,保留比较明显的明亮的部分。

f) Highpass Noise: HighPass Blur之后从图像中过滤掉噪音。

改变输入清晰度、帧率、通信、视频以及触点设置

CCV的设置文件保存在 config.xml 中

通过对config文件的更改可以改变如下的参数值

a) 输入清晰度、帧率

b) 网络通信地址和端口

c) 测试用的视频文件

d) 可以跟踪的最大触点数目

问题:

CCV可否处理其他格式视频?

CCV处理过程中一直都是灰度图像的操作吗 是否涉及RGB彩色图像?

5main.cpp源程序加注释

#include "ofMain.h"

#include "testApp.h"

#include "ofAppGlutWindow.h"

#include <windows.h>

#include <vfw.h>

#pragma  comment (lib,"Vfw32.lib")

BOOL bIsUsbIn  = FALSE;

//==============================================================

//  函数IsUSBCameraIn()用于判断当前是否有摄像头以USB方式连接到电脑,为CCV程序//提供视频源

//==============================================================

BOOL IsUSBCameraIn()

{

TCHAR   achDeviceVersion[80]   ;   //设备版本信息  

TCHAR   achDeviceAndVersion[160];   //设备名及版本信息  

int   uIndex;   

int DriverCount=0;//支持的设备驱动程序个数  

for(uIndex=0;uIndex <5;uIndex++)   

{   

if(capGetDriverDescription(uIndex,achDeviceAndVersion,

sizeof(achDeviceAndVersion)*sizeof(TCHAR),achDeviceVersion,sizeof(achDeviceVersion)*sizeof(TCHAR)))   

{   

_tcscat(achDeviceAndVersion, L", ");   

_tcscat(achDeviceAndVersion,achDeviceVersion);   

DriverCount++;   

}   

else   

break;   

}   

if (DriverCount>0)

{

HWND hWndCap=capCreateCaptureWindow(NULL,   

WS_CHILD,0,0,   

0,0,   

::GetDesktopWindow(),//parent   window   

0   //chile   window   id   

);//建立视频采集窗口  

if(capDriverConnect(hWndCap,0))//判断采集窗口是否与号采集卡驱动相连接 

{

capDriverDisconnect(hWndCap);

DestroyWindow(hWndCap);

hWndCap = NULL;

return TRUE;

}

}

return FALSE;

}

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )// 隐藏控制台

int main()

{

//防止重复运行

HANDLE hMutex = CreateMutexW( NULL, TRUE, _T("CCV") );

//找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体。CreateMutex()函数可用来创建一个有名或无名的互斥量对象。CreateMutex() 用于有独占要求的程序 (在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行

if (GetLastError()==ERROR_ALREADY_EXISTS )

// This function returns the calling thread's last-error code value

{

ReleaseMutex(hMutex);

CloseHandle( hMutex );

return FALSE;  

}

bIsUsbIn = true;

ofAppGlutWindow window;

ofSetupOpenGL(&window, 900, 900, OF_WINDOW);

// <-------- setup the GL context

// this kicks off the running of my app

// can be OF_WINDOW or OF_FULLSCREEN

// pass in width and height too:

ofRunApp(new testApp());

}

附录一、CCV相关概念的阐释

1TUIOOpenCVOpenFrameworksreacTIVision分别有什么关系? 

答: TUIO只是一个协议,你不喜欢可以另起门户自己定义一个,需要说明的一点是它是基于OSC的。 

OpenFrameworksprocessing是同等类型的东西,一系列C++的库,并且包含对OpenCV 1.0的简单封装。 

reacTIVision是一个可以直接运行的服务端软件,它的特点是可以识别类似 的物件,并且通过网络(OSC/TUIO)将物件的信息发给客户端。客户端可以是PD/processing

/OpenFrameworks/FLASH等。 

CamServer是和reacTIVision类似的服务端软件。通讯也是基于OSC。 

相同类型的软件还有一个叫CCVCommunity Core Vision),CCV是基于OpenFrameworks开发的,跨平台,代码非常庞大,甚至说臃肿。 

2OSC是什么? 

答: OSC是(Open Source Commerce)的缩写, osCommerce是一个利用互联网建立网上商店的应用程序,所以我们可以称它是"开源网上开店程序"osCommerce 采用了 Open Source 世界里多种主流的技术方案,提供了一整套的免费和开放式的平台,包括强大的 PHP 动态网站开发语言,稳定的 Apache web 服务器和速度一流的 MySQL 数据库服务器。   安 装和使用osCommerce,不需要特殊的系统平台,osCommerce 可以运行在任何支持 PHP3 或 PHP4 的 web 服务器上环境需要支持 PHP 和 MySQL 即可操作系统可以支持 Linux, Solaris, BSD, 或者 Microsoft Windows 

OSC首先是一套互联网通讯的协议,凡是可以连入网络的设备(PCmaciPhone)都可以用。但你并不需要去了解它到底是怎么一回事。 

因为各种开发软件都有各自支持OSC的库。p5就是oscP5openframeworks就是ofxOSC. 

你要做的是将数据准备好,写几句话,通过OSC库的功能发出去就可以了。另外一边则是接收信息,接收完了就可以随便做事情了。 

这样就做到了数据输入 与 数据可视化 的分离。 

3reacTIVision的图片能控制视频和音频呀,很神奇哈,怎么做到的? 

答: 这东西并不能直接控制视频和音频,这背后的过程是: 

1)它->摄像头->reacTIVision->信息(坐标、旋转角度)->通过OSC将信息传至客户端 

2)客户端收到信息->根据坐标和旋转角度做任何事情,到了这一步,具体做什么事情和其实摄像头是无关的 

4reacTIVision识别用的黑白图片好难看啊,怎么来的? 

答: 图像不是随便就有的,这张图就像是二维条形码,程序可以瞬间识别它(根据身份证里的内容),并且无论旋转放缩都不会认错,所以显而易见的还有一个专门用于生成图片的软件,并且每张图片都伴有一个身份证,reacTIVision 在初始化时会读取身份证,然后就一切顺其自然了。这其实和artoolkit里的方块图片起的是同样的作用。

5XML

为了阅读方便,本文使用全文手工转换。转换内容:

本文采用电脑和信息技术组全文转换 [查看• [编辑• [强制刷新]

显示RecipeBook的例子,一种基于XML语法上的烹饪技术书刊。此标签可转换为:HTMLPDF以及Rich Text Format并使用编程语言XSL

关闭↑字词转换说明

字词转换是中文维基的一项自动转换,目的是通过计算机程序自动消除繁简、地区词等不同用字模式的差异,以达到阅读方便。字词转换包括全局转换和手动转换,本说明所使用的标题转换和全文转换技术,都属于手动转换。

如果您想对我们的字词转换系统提出一些改进建议,或者提交应用面更广的转换(中文*全站乃至MediaWiki软件),或者报告转换系统的错误,请前往Wikipedia:字词转换请求或候选发表您的意见。

可扩展标记语言(英语:eXtensible Markup Language,简称:XML),是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士*决定的标记语言,这就是语言的可扩展性。XML是从标准通用标记语言SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言XSL)、XBRLXPath等。

http://zh.wikipedia.org/wiki/XML

以下文件是xml格式

· XHTML

· DTD文件类型描述

· XML Schema

· XLink

· SVG

· XSLT

· X3D

· HTML

· CSS

· RDF

· RSS 

Unicode

6OpenFrameworks

CCV入门教程(三)

遵循如下的框架

7PGRFlyCapture

FlyCapture 2.0 is Point Grey's most stable and feature-rich software package ever. This release features cross-platform support for both 32- / 64-bit Microsoft Windows and Linux Ubuntu operating systems, using common application programming interfaces (APIs) for C, C++ or managed code. 

Other key features include: 

• Simplified object-oriented interface to make application development faster and easier;  

• Hardware abstraction layer (HAL) enabling the seamless connection of any Point Grey FireWire, USB 2.0 or GigE Vision camera product to the host system; 

• Supports new IIDC 1.32 features such as frame buffering & lookup table; 

• Thunking functionality allowing applications built using 32-bit versions of the SDK to communicate with cameras that run on 64-bit operating systems. 

• Support for TWAIN, ActiveX and DirectShow. 

A translation layer allows existing FlyCapture 1.x-based applications to run in the 2.0 interface. To learn more, or for assistance in upgrading to FlyCapture 2.0, see