搜索
bottom↓
回复: 60

我的手绘键盘(matlab版)

  [复制链接]

出0入0汤圆

发表于 2012-11-19 14:30:32 | 显示全部楼层 |阅读模式
其实这个手绘键盘和激光投影键盘原理一样,只不过键盘是用手画的
贴一张原理图,不明的可以百度


硬件部分包括USB摄像头(加红外滤光片)和线状激光。东西不多,盒子很空,由于摄像头视距要求,盒子不能太小。








调试状态下(debug=1),放出视频,直接观察。命令窗口打出捕捉手指的坐标


先用Matlab做出原理测试程序,以后有机会再用OpenCv,甚至ARM来搞

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出20入70汤圆

发表于 2012-11-19 14:34:51 | 显示全部楼层
牛掰!               

出0入0汤圆

发表于 2012-11-19 14:37:55 | 显示全部楼层
cool                                                                                                         

出0入0汤圆

发表于 2012-11-19 14:40:24 | 显示全部楼层
牛掰           

出0入0汤圆

发表于 2012-11-19 14:41:38 | 显示全部楼层
cool    字符bug

出0入0汤圆

发表于 2012-11-19 15:20:43 | 显示全部楼层
cool 很少有人有闲功夫玩自己喜欢的东西了

出0入0汤圆

发表于 2012-11-19 15:29:12 | 显示全部楼层
漂亮,过一阵,我也出一个,无需PC干预。

出0入0汤圆

发表于 2012-11-19 15:36:28 | 显示全部楼层
这个主要靠图像识别了?

出0入0汤圆

发表于 2012-11-19 15:38:12 | 显示全部楼层
强捍,太帅了,我也想画一个

出0入0汤圆

发表于 2012-11-19 15:48:41 | 显示全部楼层
看晕了的说····

出0入0汤圆

发表于 2012-11-19 15:49:54 | 显示全部楼层
佩服说干就干成的人。技术很强!

出0入0汤圆

发表于 2012-11-19 15:51:01 | 显示全部楼层

   (__) 
  /oo\\________
  \ /     \---\
  \/    /  \  \
   \\_|___\\_|/  *
     ||  YY|  
     ||  ||   

出0入0汤圆

发表于 2012-11-19 15:53:36 | 显示全部楼层
这个牛叉!

出0入0汤圆

发表于 2012-11-19 15:56:16 | 显示全部楼层
绝对的牛x

出0入0汤圆

发表于 2012-11-19 15:56:28 | 显示全部楼层
牛~小弟菜鸟!

出0入0汤圆

发表于 2012-11-19 15:56:58 | 显示全部楼层
牛逼很的说哦...

出0入0汤圆

发表于 2012-11-19 16:02:00 | 显示全部楼层
楼主很强大 建议置酷

出0入0汤圆

发表于 2012-11-19 16:03:45 | 显示全部楼层
楼主,想知道你的摄像头是什么样的,matlab上驱动如何实现?

出0入0汤圆

发表于 2012-11-19 16:20:07 | 显示全部楼层
red_pig 发表于 2012-11-19 16:03
楼主,想知道你的摄像头是什么样的,matlab上驱动如何实现?

同问,建议 lz 科普下。

出0入0汤圆

发表于 2012-11-19 16:41:50 | 显示全部楼层
太牛叉了     

出0入0汤圆

发表于 2012-11-19 17:03:02 | 显示全部楼层
不错,很好玩的啊

出0入0汤圆

发表于 2012-11-19 17:04:58 | 显示全部楼层
还有个简单的软件来实现:
http://www.roborealm.com/index.php

出0入0汤圆

 楼主| 发表于 2012-11-19 17:56:32 | 显示全部楼层
回答上述朋友的问题:
1. 使用的摄像头就是最常见的USB摄像头(QQ用的那种)
2. 关于Matlab下使用摄像头的问题,得益于Matlab的工具箱,使用起来比想象中的容易,网上可以找到很多,我就不另外啰嗦了,直接贴一篇

另:如果没有红外滤光片和激光的,也可以采用红色激光的,无需滤光片,直接使用红色通道图像数据,效果也不错。

=====================================
如何使用MATLAB进行USB2.0摄像头的编程

来源: 胡堃Lance的日志
http://blog.renren.com/GetEntry. ... amp;owner=328717254


Matlab中的图像获取工具箱给我们提供了必要的函数,我们直接调用就可以了。我们主要就是简单的介绍如何使用该工具箱进行对USB2.0摄像头的编程

废话不多说,我们开始言归正传了。但是一定记住你必须安装了PC摄像头才可以进行下面的东西,如果说首次安装摄像头最好重启下PC,否则可能出现没法识别摄像头。

整个过程我们需要做如下几件事情:
1、查询USB2.0Camera 的具体参数(imaqhwinfo)
2、创建视频输入对象(videoinput)
3、图像预览和显示(preview、stoppreview、closepreview和image)
4、获取视频图像(getsnapshot)
5、图像获取设备的获取和设置(get和set)
6、关闭视频对象(delete)

在正式讲解之前,我想说明下几个个在图像获取工具箱中的术语:

图像获取设备:比如摄像头、扫描仪
图像获取适配器:主要的目的是通过驱动在Matlab和图像获取设备之间传递信息
ROI:region-of-interest 感兴趣区域

在说说几个常用的函数,我们这里只是说明它的作用,具体如何使用参考帮助系统
getselectedsource
imaqfind
isvalid
peekdata
getdata
imaqmontage

给我们一个摄像头我们必须知道他的相关参数,才可能进行我们的编程下。当然我们可以查询商家手册,但是那个累不累人呀。

Matlab的图像获取工具箱为我提供了imaqhwinfo(),来获取PC上以安装的图像获取硬件信息

没有输入参数时,返回一个结构体, 它包含了系统中存在的适配器和Matlab相关的版本信息(第一次我们一般使用这个)

代码:

>> info=imaqhwinfo

info =
InstalledAdaptors: {'coreco' 'winvideo'}%这里可以看到我的PC上安装了两个适配器
MATLABVersion: '7.6 (R2008a)'
ToolboxName: 'Image Acquisition Toolbox'
ToolboxVersion: '3.1 (R2008a)'

有输入参数的时候,返回一个结构体,包含了指定的适配器的数据信息



代码:
>> win_info=imaqhwinfo('winvideo')%我们看看第二适配器的具体参数

win_info =

AdaptorDllName: [1x81 char]%适配器dll文件绝对路径
AdaptorDllVersion: '3.1 (R2008a)'%适配器dll文件版本
AdaptorName: 'winvideo'%s适配器名称
DeviceIDs: {[1]}%设备ID号,这个我们经常需要用到
DeviceInfo: [1x1 struct]%设备信息,这里主要是图像获取设备的一些参数,比较重要

%====================下面我们了解下,这个图像获取设备到底有哪些的详细信息吧====================

>> win_info.DeviceIDs

ans =

[1]

>> dev_win_info=win_info.DeviceInfo

dev_win_info =

DefaultFormat: 'RGB24_320x240'%获取图片的默认格式
DeviceFileSupported: 0
DeviceName: 'USB PC CAMERA P227'%设备名称
DeviceID: 1%设备号
ObjectConstructor: 'videoinput('winvideo', 1)'%对象构建方式,这个绝大部分都是一样的
SupportedFormats: {1x12 cell}%获取的图像支持格式,一般都有好多种,上面的DefaultFormat只是默认格式而已

%==================================看看图像获取设备支持的图像格式==================================

>> dev_win_info.SupportedFormats%可以看到我的PC上的摄像头支持下面12中图片格式

ans =

Columns 1 through 5

'I420_160x120' 'I420_176x144' 'I420_320x240' 'I420_352x288' 'I420_640x480'

Columns 6 through 9

'RGB24_1280x960' 'RGB24_160x120' 'RGB24_176x144' 'RGB24_320x240'

Columns 10 through 12

'RGB24_352x288' 'RGB24_640x480' 'RGB24_800x600'

视频预览、采集和保存

(1)创建视频输入对象
obj = videoinput(adaptorname,deviceID,format)
adaptorname:适配器名称,首次可以使用不带参数的imaqhwinfo函数获取
deviceID:设备ID号,首次可以通过imaqhwinfo函数获取
format:视频采集格式,可以通过DeviceInfo的SupportedFormats获取,不填写则使用默认格式



代码:


>> obj = videoinput('winvideo',1,'RGB24_320x240')%这里我们使用默认的视频采集格式

Summary of Video Input Object Using 'USB PC CAMERA P227'.

Acquisition Source(s): input1 is available.

Acquisition Parameters: 'input1' is the current selected source.
10 frames per trigger using the selected source.
'RGB24_320x240' video data to be logged upon START.
Grabbing first of every 1 frame(s).
Log data to 'memory' on trigger.

Trigger Parameters: 1 'immediate' trigger(s) on START.

Status: Waiting for START.
0 frames acquired since starting.
0 frames available for GETDATA.

(2)打开视频预览窗口
himage=preview(obj,himage)
obj:视频采集对象
himage:视频预览窗口对应的句柄,也就是说在指定的句柄对象中预览视频,该参数可以空缺
至于预览窗口的关闭和停止可以使用colsepreview和stoppreview函数

代码:


vidRes = get(obj, 'VideoResolution');
nBands = get(obj, 'NumberOfBands');
figure()%指定预览窗体显示的figure
axes()%指定预览窗口显示的坐标系
hImage = image( zeros(vidRes(2), vidRes(1), nBands) );
preview(obj, hImage);

(3)图像捕捉、显示和保存


代码:


%frame是H×W×B的矩阵。H图像高度,由ROIPosition指定;w图像宽度,由ROIPosition指定;B索线个数,由NumberOfBands指定
frame = getsnapshot(obj);
imshow(frame);
imwrite(fame,'snap.jpg','jpg');

实验步骤

1、 查询USB2.0Camera 的具体参数

输入 imaqInfo = imaqhwinfo

返回信息

InstalledAdaptors: {'winvideo'}
MATLABVersion: '7.1 (R14SP3)'
ToolboxName: 'Image Acquisition Toolbox'
ToolboxVersion: '1.9 (R14SP3)'

输入imaqInfo.InstalledAdaptors

返回信息

ans =

'winvideo'

输入winvideoinfo = imaqhwinfo('winvideo')

返回信息

winvideoinfo =

AdaptorDllName: [1x76 char]
AdaptorDllVersion: '1.9 (R14SP3)'
AdaptorName: 'winvideo'
DeviceIDs: {[1]}
DeviceInfo: [1x1 struct]

输入 winvideoinfo.DeviceInfo

返回信息
ans =
DefaultFormat: 'YUY2_160x120'
DeviceFileSupported: 0
DeviceName: 'USB 视频设备'
DeviceID: 1
ObjectConstructor: 'videoinput('winvideo', 1)'
SupportedFormats: {1x5 cell}

输入device1 = winvideoinfo.DeviceInfo(1)

返回信息
device1 =
DefaultFormat: 'YUY2_160x120'
DeviceFileSupported: 0
DeviceName: 'USB 视频设备'
DeviceID: 1
ObjectConstructor: 'videoinput('winvideo', 1)'
SupportedFormats: {1x5 cell}

输入device1.DeviceName
返回信息
ans =

USB 视频设备

输入device1.DeviceID
返回信息
ans =
1

输入device1.DefaultFormat
返回信息
ans =
YUY2_160x120

输入device1.SupportedFormats
返回信息
Columns 1 through 4
'YUY2_160x120' 'YUY2_176x144' 'YUY2_320x240' 'YUY2_352x288'
Column 5
'YUY2_640x480'

2、 最简单采集实验,输入如下代码,可以得到预览下的默认格式的摄像头捕捉窗口obj=videoinput('winvideo',1);
preview(obj);

3、 输入如下代码
vidobj = videoinput('winvideo',1,'YUY2_640x480');
sources = vidobj.Source;
whos sources
set(vidobj,'SelectedSourceName','input1');
sources
selectedsrc = getselectedsource(vidobj);
get(selectedsrc);
delete(vidobj);
clear vidobj;

返回信息
Name Size Bytes Class
sources 1x1 726 videosource object
Grand total is 30 elements using 726 bytes
Display Summary for Video Source Object:
Index: SourceName: Selected:
1 'input1' 'on'
General Settings:
Parent = [1x1 videoinput]
Selected = on
SourceName = input1Tag =
Type = videosource
Device Specific Properties:
BacklightCompensation = on
Brightness = -16
Contrast = 120
FrameRate = 30.0000
Gamma = 60
Hue = 0
Saturation = 40
Sharpness = 3

4、 输入如下代码
clc;
clf;
clear all;
imaqmem(30000000); %申请内存空间

%ADAPTOR:MATLAB与视频设备之间的接口,主要的目的是传递信息
vid = videoinput('winvideo', 1, 'YUY2_640x480');
preview(vid);
start(vid);
h=figure('NumberTitle','off','Name','视频',...
'MenuBar','none','color','c',...
'Position', [0, 0, 1, 1], 'Visible', 'on'); %新建窗口
set(h,'doublebuffer','on','outerposition',get(0,'screensize'));
h1=axes('Position', [0.02, 0.1, 0.4, 0.8],'Parent',h); %新建显示窗口
hold on;
axis off;
while ishandle(h) %判断是否有效的图像对象句柄
a=getsnapshot (vid); % 捕获图像
flushdata(vid); %清除数据获取引擎的所有数据、置属性SamplesAvailable为0

imshow(a); %显示图像
drawnow; % 实时更新图像
end;
delete(vid);

出100入18汤圆

发表于 2012-11-19 17:56:39 | 显示全部楼层
搞的挺好的,这东西淘宝卖的还挺贵呢。

出0入0汤圆

发表于 2012-11-19 19:19:13 | 显示全部楼层
擦,碉堡了

出0入0汤圆

发表于 2012-11-19 19:55:26 | 显示全部楼层
硬件部分不明白,忘指教!!

出0入0汤圆

发表于 2012-11-19 20:00:30 | 显示全部楼层
楼主牛b 啊

出0入4汤圆

发表于 2012-11-19 21:09:28 | 显示全部楼层
不错v         

出0入0汤圆

发表于 2012-11-20 11:03:45 | 显示全部楼层
这个厉害厉害。

出0入24汤圆

发表于 2012-11-20 11:07:56 | 显示全部楼层
学习一下~
这个有前途

出0入0汤圆

发表于 2012-11-20 11:26:27 | 显示全部楼层
顶楼主,收藏了

出0入0汤圆

发表于 2012-11-20 13:15:13 | 显示全部楼层
很有意思

出0入0汤圆

发表于 2012-11-20 13:25:25 | 显示全部楼层
楼主这个不错,matlab是亮点

出0入0汤圆

发表于 2012-11-20 13:30:13 | 显示全部楼层
LZ强悍。MATLAB读书的时候没学好。

出0入0汤圆

发表于 2012-12-22 17:06:34 | 显示全部楼层
非常有创意的设计

出0入0汤圆

发表于 2012-12-26 09:04:42 | 显示全部楼层
我去,大牛呀

出0入0汤圆

发表于 2012-12-27 00:15:07 | 显示全部楼层
cool~~~

出0入0汤圆

发表于 2012-12-27 14:26:10 | 显示全部楼层
对matlab一直感兴趣,收藏了。

出0入0汤圆

发表于 2013-1-16 21:37:43 | 显示全部楼层
以后再手机里面可以实现这个,用一个投影仪在桌面投影一个键盘,这样就可以输入了

出0入0汤圆

发表于 2013-1-18 10:12:04 | 显示全部楼层
太牛了膜拜呀

出0入0汤圆

发表于 2013-4-11 10:31:03 | 显示全部楼层
楼主很厉害,表示是新手

出0入0汤圆

发表于 2013-4-12 13:10:24 | 显示全部楼层
mark!这个碉堡了……

出0入0汤圆

发表于 2013-4-18 16:21:40 | 显示全部楼层
LZ的东西确实碉堡了,原来Matlab还能做这么多事情。
问一下,这个线状激光是红外的?

出0入0汤圆

发表于 2013-4-18 16:24:22 | 显示全部楼层
帅!唯一的遗憾就是matlab太贵……

出0入0汤圆

发表于 2013-4-20 14:44:21 来自手机 | 显示全部楼层
好!!!!!!

出0入0汤圆

 楼主| 发表于 2013-4-20 14:47:31 | 显示全部楼层
GoWind 发表于 2013-4-18 16:21
LZ的东西确实碉堡了,原来Matlab还能做这么多事情。
问一下,这个线状激光是红外的? ...

是的,线状红外的,其实如果不在乎晃眼睛,用红色激光也可以

出0入0汤圆

发表于 2013-5-5 01:13:07 | 显示全部楼层
太牛了,

出110入109汤圆

发表于 2013-5-5 01:55:45 | 显示全部楼层
强大的楼主和强大的Matlab,收藏了

出0入0汤圆

发表于 2013-5-5 23:33:08 | 显示全部楼层
COOL.......................

出0入0汤圆

发表于 2013-6-9 16:40:28 | 显示全部楼层
厉害,太厉害了!!

出0入0汤圆

发表于 2013-6-19 19:44:50 | 显示全部楼层
it's so niubility

出0入0汤圆

发表于 2013-6-19 20:07:57 | 显示全部楼层
楼主有创意。。。。

出0入0汤圆

发表于 2013-6-19 20:29:06 | 显示全部楼层
好久没关注MATLAB了,这个可扩展的范围很广嘛!

出0入0汤圆

发表于 2013-6-19 20:33:21 | 显示全部楼层
good。。。。

出0入0汤圆

发表于 2013-6-19 20:33:24 | 显示全部楼层
看来是时候补补数学 了

出0入0汤圆

发表于 2013-6-19 21:12:18 | 显示全部楼层
帅的掉渣!

出0入0汤圆

发表于 2013-6-19 21:28:39 | 显示全部楼层
楼主碉堡了

出0入0汤圆

发表于 2013-6-19 23:21:23 | 显示全部楼层
厉害,膜拜一下!

出0入0汤圆

发表于 2013-6-19 23:34:13 | 显示全部楼层
竟然是fringe

出0入0汤圆

发表于 2013-6-20 17:21:57 | 显示全部楼层
妞!牛扭纽钮拗狃,,哈哈,牛,谷歌拼音“niu"下面的字全给你啦!1
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 02:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表