梁登的csdn技术博客
3.2 CCV视频处理流程
从“2.1 滤波部分相应的代码”并且结合CCV运行界面(附录二)可以看出,CCV处理视频得到触点的流程是
a) 背景提取
当跟踪到的图像中没有看到手指头时,按下“背景移除按钮”获取背景;如果环境中光线变化常常变化,还需要打开“动态提取”开关。
b) 平滑
平滑是为了除去噪声干扰(图像去噪),是触点提取过程更加稳定,用专业术语来说是鲁棒性更高(robustness)。
c) 高通滤波
高通滤波是从手的影像中再提取出指头的关键步骤
注:为什么高通滤波可以把手指从手的影像中分割出来?
这是由手所成的像的特征决定的(手指头清晰,其他部分与背景的界限模糊,所以高频信息集中在手指部分)
d) 幅度增强
幅度增强是为了使手指头部分更明显(图像增强)
e) 阈值二值化
不断调整阀值,直到最后得到的跟踪图像(tracked image)中,只能看到手指头,而且没有虚假触点存在。参数选择影响最终触点提取的精确度,触点过大影响触点的定位
4、CCV参数的设置以及进一步讨论
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彩色图像?
5、main.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相关概念的阐释
1。TUIO、OpenCV、OpenFrameworks和reacTIVision分别有什么关系?
答: TUIO只是一个协议,你不喜欢可以另起门户自己定义一个,需要说明的一点是它是基于OSC的。
OpenFrameworks和processing是同等类型的东西,一系列C++的库,并且包含对OpenCV 1.0的简单封装。
reacTIVision是一个可以直接运行的服务端软件,它的特点是可以识别类似 的物件,并且通过网络(OSC/TUIO)将物件的信息发给客户端。客户端可以是PD/processing
/OpenFrameworks/FLASH等。
CamServer是和reacTIVision类似的服务端软件。通讯也是基于OSC。
相同类型的软件还有一个叫CCV(Community Core Vision),CCV是基于OpenFrameworks开发的,跨平台,代码非常庞大,甚至说臃肿。
2。OSC是什么?
答: 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首先是一套互联网通讯的协议,凡是可以连入网络的设备(PC、mac、iPhone)都可以用。但你并不需要去了解它到底是怎么一回事。
因为各种开发软件都有各自支持OSC的库。p5就是oscP5,openframeworks就是ofxOSC.
你要做的是将数据准备好,写几句话,通过OSC库的功能发出去就可以了。另外一边则是接收信息,接收完了就可以随便做事情了。
这样就做到了数据输入 与 数据可视化 的分离。
3。reacTIVision的图片能控制视频和音频呀,很神奇哈,怎么做到的?
答: 这东西并不能直接控制视频和音频,这背后的过程是:
1)它->摄像头->reacTIVision->信息(坐标、旋转角度)->通过OSC将信息传至客户端
2)客户端收到信息->根据坐标和旋转角度做任何事情,到了这一步,具体做什么事情和其实摄像头是无关的
4。reacTIVision识别用的黑白图片好难看啊,怎么来的?
答: 图像不是随便就有的,这张图就像是二维条形码,程序可以瞬间识别它(根据身份证里的内容),并且无论旋转放缩都不会认错,所以显而易见的还有一个专门用于生成图片的软件,并且每张图片都伴有一个身份证,reacTIVision 在初始化时会读取身份证,然后就一切顺其自然了。这其实和artoolkit里的方块图片起的是同样的作用。
5、XML
为了阅读方便,本文使用全文手工转换。转换内容:
本文采用电脑和信息技术组全文转换 [查看] • [编辑] • [强制刷新]
显示RecipeBook的例子,一种基于XML语法上的烹饪技术书刊。此标签可转换为:HTML, PDF以及Rich Text Format并使用编程语言或XSL。
关闭↑字词转换说明
字词转换是中文维基的一项自动转换,目的是通过计算机程序自动消除繁简、地区词等不同用字模式的差异,以达到阅读方便。字词转换包括全局转换和手动转换,本说明所使用的标题转换和全文转换技术,都属于手动转换。
如果您想对我们的字词转换系统提出一些改进建议,或者提交应用面更广的转换(中文*全站乃至MediaWiki软件),或者报告转换系统的错误,请前往Wikipedia:字词转换请求或候选发表您的意见。
可扩展标记语言(英语:eXtensible Markup Language,简称:XML),是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士*决定的标记语言,这就是语言的可扩展性。XML是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。
http://zh.wikipedia.org/wiki/XML
以下文件是xml格式
· XHTML
· XLink
· SVG
· XSLT
· X3D
· HTML
· CSS
· RDF
· RSS
o Unicode
6、OpenFrameworks
遵循如下的框架
7、PGRFlyCapture
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