请问如何使用VC++获得从图像采集卡(连着摄像头)得来的图像?

作者&投稿:卢聂 (若有异议请与网页底部的电邮联系)
如何使用VC++获得从图像采集卡得来的图像~

里面有例程,主要就是图像采集、显示和处理,就那么几个函数,先根据你的相机型号把相关例程的连续采集看明白,基本上就能自己写了。

1、去找Video for Windows(vfw)相关内容,里面有一个Video Capture。vfw我没用过,没办法提供更多信息了
2、……我没用过mfc,不太清楚picture控件,在msdn的windows controls里也没有找到。如果是static control控件的话,它有一个消息叫做STM_SETIMAGE,搜索一下就知道怎么给它发消息设置图片了

现在在vc上采集视频常用的方法有三:vfw,directshow,opencv

你是要进行图像处理的话推荐opencv(具体参考:于仕琪,opencv教程基础篇中的例3-6,稍作修改,估计就能用于你的工程)

下面贴出我自己编的一个小工程:如有疑问,E-mail:zhoutingzhi@gmail.com
进行opencv的预备操作你要看那本书和逛opencv中文网
http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5
如有问题可以和我讨论(我也是菜鸟,刚为解决了这个问题窃喜不已)。
1.新建mfc对话框工程,在其中添加一个picture控件,除了ID以外什么都不用改

2.在对话框头文件(没有Dlg那个)中添加(最好是在“#include "resource.h" // main symbols之后”):
#include "cxcore.h"
#include "cvcam.h"
#include "windows.h"
#include "cv.h"
#include "highgui.h"
3.在工程-》设置-》选择所有配置-》link(连接)-》对象/库模块-》中添加:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib

4.在需要触发摄像头显示的地方添加:
void CVideomfcDlg::OnButton1()
{
// TODO: Add your control notification handler code here

int ncams = cvcamGetCamerasCount( );//返回可以访问的摄像头数目
HWND MyWin=::GetDlgItem(m_hWnd,IDC_VIDEO); //获得控件句柄(IDC_VIDEO就是图片控件)
cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //选择第一个摄像头
int width=240;
int height=240;

cvcamSetProperty(0,CVCAM_PROP_WINDOW, &MyWin); // Selects a window for
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);
cvcamSetProperty(0, CVCAM_PROP_CALLBACK, callback1);
//回调函数将处理每一帧

cvcamInit( );
cvcamStart( );

}
5.改变显示的图像序列大小,在窗口属性设定了以后,添加如下代码:
int width=320; //这个就是需要显示的窗口大小
int height=240; //根据自己需要选择
cvcamSetProperty(0,CVCAM_RNDWIDTH, &width);
cvcamSetProperty(0,CVCAM_RNDHEIGHT, &height);

6.在对话框类中添加callback成员函数(注意,在添加函数的时候,一定要选择static,不选的话你就自己郁闷去吧,反正我是为了这个郁闷了2个礼拜)
void CVideomfcDlg::callback1(IplImage *image)
{

IplImage* image1 = image;
int i,j;

assert (image);
//获取当前系统时间
SYSTEMTIME st2={0};
GetLocalTime(&st2);
char sss[18]={'C',':','\\','\\','1','\\','\\','1','1','1','1','1','1','.','j','p','g'}; //这个是用来存储所要保存的图片名的,用的是一个笨办法,先定义,再修改其中的数组值。

sss[7]=st2.wHour/10+48; //获取系统当前小时
sss[8]=st2.wHour%10+48;

sss[9]=st2.wMinute/10+48; //获取系统当前分钟
sss[10]=st2.wMinute%10+48;

sss[11]=st2.wSecond/10+48; //获取系统当前秒
sss[12]=st2.wSecond%10+48;

cvSaveImage(sss,image1); //使用系统当前时间为名称(XXXXXX.jpg)存储图片
}
ps:你还需要在c盘根目录下建立一个叫1的文件夹保存图片。
祝你成功!

大家知道,为了提高系统的稳定性,Windows操作系统对硬件操作进行了隔离;应用程序一般不能直接访问硬件。DirectShow Filter工作在用户模式(User mode,操作系统特权级别为Ring 3),而硬件工作在内核模式(Kernel mode,操作系统特权级别为Ring 0),那么它们之间怎么协同工作呢?

DirectShow解决的方法是,为这些硬件设计包装Filter;这种Filter能够工作在用户模式下,外观、控制方法跟普通Filter一样,而包装Filter内部完成与硬件驱动程序的交互。这样的设计,使得编写DirectShow应用程序的开发人员,从为支持硬件而需做出的特殊处理中解脱出来。

所以说要用到DirectShow
先下载directSDK9.0b,在其安装目录下有大量源码可供参考,但是如果你VC不好的话也就没办法了。

用DirectShow
具体参见网页:http://www.west263.com/info/html/chengxusheji/C-C--/20080410/60853.html

如果他的软件没有保存录像功能或者截图功能,你只能自己去找这个型号板卡的开发接口,也就是通常说的板卡api,这个是很麻烦的,如果不是公司研发需要没人干这个事情。如果有截图或者录像功能的话,通常都是压缩过的格式,现在的标准是h.264,你应该找相应的解压缩软件,或者自己找算法自己写(这个也比较难,你最好有研究生学历并且精通工程数学),转化成标准图像格式也就是bmp格式然后再处理。以楼主现在的水平来看,如果想驱动板卡同时对图像进行处理有一定的难度,最好另辟蹊径。有问题可以继续问我

找本图像处理的书看看,有些还带源代码


关于左旋VC的使用问题
分开使用。早上用含水杨酸的,晚上用VC。VC怕光的。会光氧化。水杨酸主要是防止毛孔堵塞的。VC的稳定成分不是很高。没有大牌在推出。建议你还是不要使用了。甘草是镇定肌肤,有润泽的功效。面膜后使用很好。

关于vc的使用的问题
C++的内容很多,掌握语法后,在用到实践中时,会遇到很多问题。这个时候初学者如果能回头再仔细看书中的有关内容,一些问题可以得到解决,同时才会真正掌握这部分知识。相信在你的周围,有很多女生理论考试很高,但上机实验时无处下手吧?因为他们没有真正理解编程思想和原理。教材不是最重要的,相信你们老师...

求问护肤早c晚a是什么意思,一直没看懂?
3、注意防晒,vc虽能减少紫外线伤害,但不是防晒霜,防晒+vc双重作用,皮肤白得更快。4、va刺激性较高,一开始用要从低浓度开始,少量使用、逐渐增加使用、提高浓度,建立皮肤耐受。

想问早c晚a什么意思
精纯vc效果更好更猛一些,但脾气不好,不稳定、部分产品肤感不好,精纯vc的ph值比较低,脆弱肌肤使用可能会出现刺痛现象,建议先从平价产品入手,低成本尝试一下自己是否适合精纯vc。如果实在不耐受就换更温和的vc衍生物。vc衍生物:成分表中的名字一般为xxxx抗坏血酸、抗坏血酸xxxx,带各种前缀后缀。v...

我想问一下vc2010怎么创建c程序?
vc2010创建c程序的方法如下:1、在打开的VC2010中选择C++。2、点击“文件”,在“新建”选项卡中选择“项目”,选择“win32控制台程序”,命名文件。3、点击“下一步”的“空项目”。4、左键点击C1,右键点击“源文件”,选择“添加”中的“新建项目”,选择C++文件,文件名称。5、按“Ctrl”和“...

问如何在vc++里使用mscomm控件啊?
首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。 换句话说,只需要设置和监视MSComm控件的属性和...

关于VC6.0的使用问题
打开工作空间;按Alt + F (打开文件),然后按 W (打开工作空间),并从中选取你要打开的工作空间就好了...

有人问学习vc为什么难,我的看法
也不要去钻牛角尖当你可以根据书上的例子编几个小程序,对VC有一个感性的认识之后,你就可以开始兼顾其他的方面了想要用好VC,需要的并不是只有VC本身的知识,还需要其他一些东西:1、对纯C++有一定的功力,几本好书如:《C++ primer》,《Accelerated C++》是入门就可以看的好书,都有中文版卖,...

VC6.0使用中的问题
你是指这个吗?也就是说你的现在只有classview和fileview是吧,右键单击classview或fileview(在图上的部分内点),就可以看到选项了吧,classview,resourceview和fileview三个勾,都打上就ok

求问护肤早c晚a是什么意思,一直没看懂
1. 早C的作用:维生素C是一种强效的抗氧化剂,能够在白天帮助肌肤抵御环境因素带来的自由基损伤。它通过清除自由基,保护肌肤免受其伤害,从而有助于维持肌肤的弹性和光泽。然而,VC在阳光下容易氧化,因此使用含有VC的护肤品后,应确保做好防晒措施,以保持其活性。有些人使用VC产品后可能会发现肌肤变...

班玛县18521641978: 如何使用VC++获得笔记本电脑自带的摄像头里的图像? -
察饶吉他: 1、去找Video for Windows(vfw)相关内容,里面有一个Video Capture.vfw我没用过,没办法提供更多信息了2、……我没用过mfc,不太清楚picture控件,在msdn的windows controls里也没有找到.如果是static control控件的话,它有一个消息叫做STM_SETIMAGE,搜索一下就知道怎么给它发消息设置图片了

班玛县18521641978: 用VC++如何获取屏幕图像,且显示出来 -
察饶吉他: HBITMAP holdbitmap,hbitmap; HDC hdc,hscreendc,hmemdc; hdc=GetWindowDC(hwnd);//获得整个hwnd指向的窗口的DC GetWindowRect(hwnd,&rect);//获得窗口矩形 hscreendc=CreateDC("DISPLAY",NULL,NULL,NULL);//获得整个屏幕...

班玛县18521641978: VC++ 如何调用扫描仪驱动来获取图像信息? -
察饶吉他: 就拿打印程序为例,微软将打印页面看成是一个GDI绘图表面,通过win32平台调用,可以获取打印机的GDI表面,你在上面绘制图形和使用GDI是一模一样的.扫描仪没有统一的标准,他的驱动一般由设备厂商提供,当然也有微软的通用驱动,...

班玛县18521641978: C++中如何获取图片的像素值 -
察饶吉他: 用gdi+ 、OpenCV、cximge、freeimage等等库 都有方法加载图像,然后获取对象的像素: 比如用gdi+: 1、#include "GdiPlus.h" #pragma comment(lib, "gdiplus.lib") 2、初始化gdi+(具体可以百度下:) 3、Bitmap image(文件名); int w = image.GetWidth(); int h = image.GetHeight().

班玛县18521641978: 怎么用C++实现USB摄像头的图像采集 -
察饶吉他: Windows中,有VFW API可以做到,,另外,使用 direct show也只可以 的~

班玛县18521641978: VC++6.0 "graphics.h"头文件中的这些函数怎么用?如何用这些函数从图片文件获取图像并 绘制图像到屏幕? -
察饶吉他: easyx的帮助文件里不是有吗 显示个图片so easy(带easyx的绿色vc 在easyx tie ba 找)

班玛县18521641978: 如何用VC++采集数据? -
察饶吉他: BEGIN_EVENTSINK_MAP(CSCommTestDlg, CDialog) //{{AFX_EVENTSINK_MAP(CSCommTestDlg) ON_EVENT(CSCommTestDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE) //}}AFX_EVENTSINK_MAP END_EVENTSINK_...

班玛县18521641978: 菜鸟求教VC++下如何载入一张位图并获取该位图的像素值,需要详细的步骤,谢谢!确定解决问题后给分! -
察饶吉他: 用CImage 类啊.我用的是VS2010;如果是VC6.0要加些lib和dll库,你网上有下载 里面有很多函数如GetPixel(int x,int y);//Retrieves the color of the pixel specified by x and y.CImage c; c.Load("d:/1.bmp"); int w=c.GetWidth();int h=c.GetHeight(); for(int i=0;i<w;i++) for(int j=0;j<h;j++) { COLORREF cc=c.GetPixel(i,j);//COLORREF其实就是int类型,也就是RGB的0-255值 }

班玛县18521641978: 【高分求救】VC++下如何载入一张位图并获取该位图的像素值 -
察饶吉他: HBITMAP hBmp = (HBITMAP)LoadImage( NULL , "z:\\bg4.bmp" , IMAGE_BITMAP , 0 , 0 , LR_CREATEDIBSECTION | LR_LOADFROMFILE); if (hBmp != NULL) { BITMAP bmp = {0}; int ret = GetObject( hBmp , sizeof(BITMAP) , &bmp ); if (ret) ...

班玛县18521641978: 急!!如何用Visual C++ 读取jpg图片然后显示出来 -
察饶吉他: 用这个函数loadimage() 载入图片

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网