可以让你玩儿光剑的程序,vc实现方法和代码

原创 2011年01月08日 13:37:00

前几天写了一个可以玩儿光剑的程序,个人觉得很酷

 

这个程序你完全可以在自己电脑上玩玩,很有星球大战中Jedi的感觉

 

在程序中,本没必要使用opencv,但尝试把opencv和mfc dialog结合一下,于是最终实现方式如下:

opencv采集图像,mfc双缓冲显示,gdi+显示光剑图片

opencv和mfc 的结合费了不小劲儿才想到方法。

而且发现,在xp中(至少在我的电脑上),显存模式是BGRA顺序,不知道各位高手是否认同。刚开始我认为是RGB但显示结果很奇怪。

最终把IplImage数据(BGR)重新按BGRA(A=0)显示时得到正确显示

 

至于图像处理,很简单,简单的阈值化后找打目标,然后显示图片即可

 

为了使光剑更漂亮,学了点Photoshop,效果差强人意,如果你能ps出更好的图片,可以把程序中的图片替换的,文件名不变就可以

在别人的视频中找了点光剑挥动的声音

 

视频演示:http://v.youku.com/v_show/id_XMjM1NDM0OTEy.html

录像设备太差,声音效果不好,于是关了声音。你在运行程序时会听到声音,很有感觉的

 

代码下载:http://download.csdn.net/source/2969385

 

结合下图介绍一下玩法:

1:找一个颜色鲜艳点儿的棍子(在演示中我用的两个道具:一根棍子绕上了一个红色的塑料袋,垃圾铲的柄),要求并不高,只要有个主要色调就成,比如蓝色,红色。图中1处即为绕了一个红色塑料袋的棍子。

2:调节阈值。如果你不熟悉rgb,这一步似乎不太容易。点击你用的棍子(图中1处),在图中2处有rgb显示,多点几下,看看大致范围。然后调节图中4处rgb阈值。如果选中对应的多选框,表示你的棍子的这个分量小于阈值,否则表示大于。图示中,我用的是红色主调,于是R不选中,G、B选中。调整要达到的效果是,使图中3处清晰显示你棍子的位置,不是棍子的区域尽量减少

3:在图中5处,选择你喜欢的颜色。我做了六种简单的效果,你可以自己做更漂亮的替换之

4:图中6处可以关掉光剑显示

5:图中7处是为方便调试时做的,可以显示程序寻找棍子的线

不一定非得是棍子,我用的方法是拟合最大目标区域的直线

我的摄像头是640*480的,如果你的是320*240或别的,显示窗口可能不一样,但都可以玩

 

 

 

下面是几个截图:

 

 

垃圾铲

 

 

 

用手玩

 

光剑的几种效果:

 

欢迎朋友们给点意见!

 ==============================================================================

update:

 

非常感谢wo_men123456在评论中的意见:

wo_men123456:霍夫直线检测后,在用dx画

 

今天我又用直线检测做了一下,刚做的时候用canny边缘检测,效果出来时才意识到棍子有两条边,而本程序需要的不仅是直线,而且应该是中线。于是后又采用细化处理+hough检测,效果不错。

但想来直线检测和我原来采用的直线拟合就在本程序中的应用而言还是有区别的:

 因为光照的不断变化,阈值化后的图像在相邻帧之间也会不同,不同之处主要在目标边缘部分.
于是细化得出的线主要在两端出变化较大(图像端点处的结构对细化结果影响是比较大的),这样,这条线就不能很好地表示棍子。而hough直线检测,因为只是检测这一条线,给出的直线斜率变化较快,在光剑程序中就显得不太适合。
而直线拟合的方法因为使用了棍子的所有点,在试验中直线表现更为稳定,即斜率变化平滑。
我原来方法的不足之处:要求目标区域是连通的。
目标出现小距离中断时,检测到的直线段会突然变短,而hough直线检测可以较好地避免这个问题。解决方法是在检测连通域时扩大像素连接的距离。不过随之而来的是效率在一定程度上的下降。

 

 hough直线检测法代码下载:http://download.csdn.net/source/2977153

 

单帧效果比较:

1、细化+hough直线检测

2、canny边缘+hough直线

 

3、我原本的方法:直线拟合

可以让你玩儿光剑的程序,vc实现方法和代码

http://blog.csdn.net/onezeros/article/details/6124073 前几天写了一个可以玩儿光剑的程序,个人觉得很酷   这个程序你完全...
  • Real_Myth
  • Real_Myth
  • 2016年04月21日 10:09
  • 512

ping 程序(vc6.0 原始套接字实现)

#include #include #include #include //IP_TTL #pragma comment(lib,"ws2_32.lib") //ICMP首部结构体 typ...
  • mashen1989
  • mashen1989
  • 2012年06月26日 10:59
  • 1996

VC实现应用程序在线升级

开发背景   近几日一些程序老要修改点小毛病,为避免每次都通知程序使用者,便有想做一个在线自动升级的程序。在网上曾看到一个是使用 FTP 的,想到 FTP 需要用户名密码,许多程序如KFW 防火...
  • ccx_john
  • ccx_john
  • 2013年10月09日 14:12
  • 1073

Nuke光剑插件(WIP)

光剑插件 现在存在的问题有: 在使用mask时会间歇性崩溃,调试无果,是nuke自己的dll引起的,比较诡异。实现帧与帧之间的MB,这是光剑的一个标志性效果了。...
  • cuckon
  • cuckon
  • 2011年11月04日 16:08
  • 2642

vc中实现ping功能

因为想实现这个功能,所以在网上找了下资料,从中截取出来这个类,可以很方便的放在自己的程序中使用 // // Ping.h // #pragma pack(1) #define ICMP_ECHO...
  • nanfeiyannan
  • nanfeiyannan
  • 2012年05月23日 22:15
  • 10167

[豆趣]儿童读物

豆娘打电话说,自己受了刺激。追问下,才说:后面楼的某个小娃子,比豆少要小半岁,居然识1000个字,会算100以内的加减,会背诵小九九。。。末了,豆娘叹口气,说:不知道人家是天资聪颖还是后天教育的好啊。...
  • xiaosun
  • xiaosun
  • 2006年10月11日 22:51
  • 3378

限制软件试用期的源代码,vc++

#include "Register.h"#include "Windows.h"void CMainFrame::IconMT(){ BOOL bIconFlag = 0; CTime t = CT...
  • jiangxinyu
  • jiangxinyu
  • 2007年04月09日 16:06
  • 3641

程序实现自我删除的七种方法

程序实现自我删除的七种方法
  • bjtbjt
  • bjtbjt
  • 2014年08月14日 12:04
  • 4407

VC]微软ping程序源代码完整版

内容简介: 编写自己的一个ping程序,可以说是许多人迈出网络编程的第一步吧!!这个ping程序的源代码经过我的修改和调试,基本上可以取代windows中自带的ping程序. 各个模块后都有我的详细注...
  • tancfjob
  • tancfjob
  • 2008年05月07日 12:46
  • 2813

VC++修改注册表使应用程序实现开机自动启动

很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册Software\\Microsoft\\Windows\\CurrentVersion\\Run...
  • wangwenjing90
  • wangwenjing90
  • 2013年03月26日 10:25
  • 4642
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:可以让你玩儿光剑的程序,vc实现方法和代码
举报原因:
原因补充:

(最多只允许输入30个字)