怎么知道t7000 摄像头怎么用是T,v,h,pnp系列的

新浪广告共享计划>
广告共享计划
VC+OpenCV+DirectShow&的多个摄像头同步工作
21:05 23800人阅读 (75)
因项目需要采集2个摄像头的数据进行双目检测,一开始采用以下代码来测试:
#include "stdafx.h"
#include &&/span&cv.h&
#include &&/span&cxcore.h&
#include &&/span&highgui.h&
int main(int argc, _TCHAR* argv[])
CvCapture* capture1 = cvCreateCameraCapture( 0 );
CvCapture* capture2 = cvCreateCameraCapture( 1 );
double w = 320, h = 240;
cvSetCaptureProperty ( capture1, CV_CAP_PROP_FRAME_WIDTH,
cvSetCaptureProperty ( capture1, CV_CAP_PROP_FRAME_HEIGHT, h );
cvSetCaptureProperty ( capture2, CV_CAP_PROP_FRAME_WIDTH,
cvSetCaptureProperty ( capture2, CV_CAP_PROP_FRAME_HEIGHT, h );
cvNamedWindow( "Camera_1", CV_WINDOW_AUTOSIZE );
cvNamedWindow( "Camera_2", CV_WINDOW_AUTOSIZE );
IplImage* frame1;
IplImage* frame2;
int n = 2;
frame1 = cvQueryFrame( capture1 );
if( !frame1 ) break;
cvShowImage( "Camera_1", frame1 );
frame2 = cvQueryFrame( capture2 );
if( !frame2 ) break;
cvShowImage( "Camera_2", frame2 );
int key = cvWaitKey(30);
if( key == 27 ) break;
cvReleaseCapture( &capture1 );
cvReleaseCapture( &capture2 );
cvDestroyWindow( "Camera_1" );
cvDestroyWindow( "Camera_2" );
这个程序在使用不同类型的摄像头时,例如我使用一个普通的网络摄像头,另外一个是手机上的摄像头(这款手机具有网络摄像头功能),这样的话程序就能
正常运行;但如果摄像头是相同类型时,就只能读取其中一个摄像头的数据了,第二个窗口则是一片灰色。查阅开发文档资料得知
cvCreateCameraCapture(int index) 函数可以选择摄像头,但实际测试发现
cvCreateCameraCapture 只接受 &1 和 0
两种参数,其他值,如1,2,101,102,201,202...全都无法正确的切换到第二个接入的摄像头。如果两个 capture
都使用 cvCreateCameraCapture(-1),是可以切换到第二个摄像头,但当第二次执行
cvCreateCameraCapture()
函数时,会强行弹出选择摄像头的对话框要你手动选择,而且以后再添加摄像头的话,还得修改代码重新build,实际项目中肯定不能这样处理。在
OpenCV中文论坛上找到的解释是,如果摄像头的名称是“USB视频设备 #*”,则 OpenCV&
只能读取其中一个的数据。
查阅opencv的cvcam官方文档,找到一些资料:
//Prototype
CVCAM_API int cvcamSelectCamera(int** out);
Function ThatSelectsCamera()
int nselected = cvcamSelectCamera(&out);
if(nselected&0)
printf("the 1-st selected camera is camera number %d", out[0]);
if(nselected == 2)
printf("the 2-nd selected camera is camera number %d", out[1]);
free(out);
//The second, non-dialog way is to use CVCAM_PROP_ENABLE property like this:
int desiredcamera = 0;//for example
cvcamSetProperty(desiredcamera, CVCAM_PROP_ENABLE,CVCAMTRUE);
根据上述说明,我找到了下面这段对应的代码,不过应该是用 VC6+OpenCV1.0
写的,在我的机子上(VS2008+OpenCV2.0)运行不了,不能验证是否有效,不过还是贴出来供大家讨论:
#include &&/span&cvcam.h&
#include &&/span&cv.h&
#include &&/span&highgui.h&
#include "stdio.h"
#include &&/span&windows.h&
void StereoCallback(IplImage *frame1,IplImage *frame2);
void onMouse(int Event,int x,int y,int flags,void *param);
IplImage *image1,*image2;
char *strleft[4]={"left1.bmp","left2.bmp","left3.bmp","left4.bmp"};
char *strright[4]={"right1.bmp","right2.bmp","right3.bmp","right4.bmp"};
void main()
HWND CaptureWindow1=0;
HWND CaptureWindow2=0;
//int ncams=cvcamGetCamerasCount(); //获取摄像头的个数
//用对话框的形式来选取摄像头
int *CameraN
int nSelected = cvcamSelectCamera(&CameraNumber);
//彩色图像
image1=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,3);
image2=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,3);
//初始化两个摄像头
cvNamedWindow("cvcam1 Window",1);
CaptureWindow1=(HWND)cvGetWindowHandle("cvcam1 Window");
cvcamSetProperty(CameraNumber[0], CVCAM_PROP_ENABLE, CVCAMTRUE);
cvcamSetProperty(CameraNumber[0], CVCAM_PROP_RENDER, CVCAMTRUE);
cvcamSetProperty(CameraNumber[0], CVCAM_PROP_WINDOW, &CaptureWindow1);
cvSetMouseCallback("cvcam1 Window",onMouse,0);
cvNamedWindow("cvcam2 Window",1);
CaptureWindow2=(HWND)cvGetWindowHandle("cvcam2 Window");
cvcamSetProperty(CameraNumber[1], CVCAM_PROP_ENABLE, CVCAMTRUE);
cvcamSetProperty(CameraNumber[1], CVCAM_PROP_RENDER, CVCAMTRUE);
cvcamSetProperty(CameraNumber[1], CVCAM_PROP_WINDOW, &CaptureWindow2);
//让两个摄像头同步
cvcamSetProperty(CameraNumber[0], CVCAM_STEREO_CALLBACK,(void *)&StereoCallback);
//启动程序
cvcamInit();
cvcamStart();
cvWaitKey(0);
cvcamStop();
cvcamExit();
free(CameraNumber);
cvDestroyWindow("cvcam1 Window");
cvDestroyWindow("cvcam2 Window");
void StereoCallback(IplImage* frame1,IplImage *frame2)
//拷贝图像到全局变量image中 该函数这样用存在问题
cvCopy(frame1,image1);
cvCopy(frame2,image2);
image1=cvCloneImage(frame1);
image2=cvCloneImage(frame2);
//对截取的图像翻转
cvFlip(image1,image1,0);
cvFlip(image2,image2,0);
void onMouse(int Event,int x,int y,int flags,void *param)
static int num=0;
if(Event==CV_EVENT_LBUTTONDOWN)
if(num==4)num=0;//只是固定定义了保存4张图片,为了不让程序非法而设置的复原
cvcamPause();
//图像保存
cvSaveImage(strleft[num],image1);
cvSaveImage(strright[num],image2);
cvSaveImage("left.bmp",image1);
cvSaveImage("right.bmp",image2);
if(Event==CV_EVENT_RBUTTONDOWN)
cvcamResume();
在论坛上找了很久,最终找到了解决办法,即利用于仕琪老师提供的DirectShow视频采集方案()。该方案介绍的CCameraDS类调用采集函数可直接返回IplImage,使用更方便,且集成了DirectShow,勿需安装庞大的DirectX/Platform
利用该方案提供的例程,结合上一篇笔记中单窗口显示多个视频子图像的程序,就实现了读取两个摄像头的数据、并进行实时边缘检测的功能,主函数代码如下:
//////////////////////////////////////////////////////////////////////
// Multiple Cameras Capture using DirectShow
// Author: Yuhua Zou
// Thanks to:
Shiqi Yu (shiqi.)
HardyAI@OpenCV China
flymanbox@OpenCV China (for his contribution to function CameraName, and frame width/height setting)
// Last modification: October 8, 2009
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// 使用说明:
在 VC6 开发环境下的使用说明:
1. 将CameraDS.h CameraDS.cpp以及目录DirectShow复制到你的项目中
2. 菜单 Project-&Settings-&Settings for:(All configurations)-&C/C++-&Category(Preprocessor)-&Additional include directories
设置为 DirectShow/Include
3. 菜单 Project-&Settings-&Settings for:(All configurations)-&Link-&Category(Input)-&Additional library directories
设置为 DirectShow/Lib
在 VS 开发环境下的使用说明:
1. 将CameraDS.h CameraDS.cpp复制到你的项目中
2. 将DirectShow复制到你的opencv根目录下,菜单 工具-&选项-&项目和解决方案-&vc++目录,把..(你的opencv安装目录)/DirectShow/Include添加到
“引用文件”中$(VCInstallDir)PlatformSDK/include和$(FrameworkSDKDir)include下面任意位置
3. 菜单 工具-&选项-&项目和解决方案-&vc++目录,把..(你的opencv安装目录)/DirectShow/Lib添加到“库文件”下面。也可参考使用说明3。
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "camerads.h"
#include &&/span&cv.h&
#include &&/span&cxcore.h&
#include &&/span&highgui.h&
#include &&/span&stdio.h&
#include &&/span&stdarg.h&
#include &&/span&time.h&
// 单窗口显示多幅图像的函数
void cvShowMultiImages(char* title, int nArgs, ...)
// 略,详见学习笔记(5)
int main( int argc, char** argv )
//仅仅获取摄像头数目
cam_count = CCameraDS::CameraCount();
printf("There are %d cameras./n", cam_count);
//获取所有摄像头的名称
for(int i=0; i &&/span& cam_ i++)
char camera_name[1024];
int retval = CCameraDS::CameraName(i, camera_name, sizeof(camera_name) );
if(retval &0)
printf("Camera #%d's Name is '%s'./n", i, camera_name);
printf("Can not get Camera #%d's name./n", i);
if(cam_count==0)
return -1;
// 创建2个摄像头类
CCameraDS camera1;
CCameraDS camera2;
//打开第一个摄像头
//if(! camera.OpenCamera(0, true)) //弹出属性选择窗口
if(! camera1.OpenCamera(0, false, 320,240)) //不弹出属性选择窗口,用代码制定图像宽和高
fprintf(stderr, "Can not open camera./n");
return -1;
//打开第二个摄像头
camera2.OpenCamera(1, false, 320,240);
cvNamedWindow("Multiple Cameras");
// 初始化在子图像中显示字符的字体格式
cvInitFont(&tFont,
CV_FONT_HERSHEY_COMPLEX, 0.5f,0.7f,0,1,8);
char cam1str[] = "Camera #1";
char cam2str[] = "Camera #2";
// 为读取系统时间信息分配内存
char timestr[25];
memset(timestr, 0, 25 * sizeof(char));
//获取一帧
IplImage *pFrame1 = camera1.QueryFrame();
IplImage *pFrame2 = camera2.QueryFrame();
// 获取当前帧的灰度图
IplImage* frame_gray_1 = cvCreateImage(cvGetSize(pFrame1),pFrame1-&depth,1);
IplImage* frame_gray_2 = cvCreateImage(cvGetSize(pFrame2),pFrame2-&depth,1);
cvCvtColor(pFrame1,frame_gray_1,CV_RGB2GRAY);
cvCvtColor(pFrame2,frame_gray_2,CV_RGB2GRAY);
// 对灰度图像进行Canny边缘检测
// 然后将图像通道数改为三通道
IplImage* frame_canny_1 = cvCreateImage(cvGetSize(pFrame1),pFrame1-&depth,1);
IplImage* frame_canny_2 = cvCreateImage(cvGetSize(pFrame2),pFrame2-&depth,1);
IplImage* frame1 = cvCreateImage(cvGetSize(pFrame1),pFrame1-&depth,pFrame1-&nChannels);
IplImage* frame2 = cvCreateImage(cvGetSize(pFrame2),pFrame2-&depth,pFrame2-&nChannels);
cvCanny(frame_gray_1,frame_canny_1,20,75,3);
cvCanny(frame_gray_2,frame_canny_2,20,75,3);
cvCvtColor(frame_canny_1,frame1,CV_GRAY2BGR);
cvCvtColor(frame_canny_2,frame2,CV_GRAY2BGR);
// 获取系统时间信息
struct tm*
rawtime = time( NULL );
timeinfo = localtime( &rawtime );
char* p = asctime( timeinfo );
// 字符串 p 的第25个字符是换行符 '/n'
// 但在子图像中将乱码显示
// 故仅读取 p 的前 24 个字符
for (int i = 0; i &&/span& 24; i++)
timestr[i] = *p;
// 在每个子图像上显示摄像头序号以及系统时间信息
cvPutText( pFrame1, cam1str, cvPoint(95,15), &tFont,
CV_RGB(255,0,0) );
cvPutText( pFrame2, cam2str, cvPoint(95,15), &tFont,
CV_RGB(255,0,0) );
cvPutText( frame1,
cam1str, cvPoint(95,15), &tFont,
CV_RGB(255,0,0) );
cvPutText( frame2,
cam2str, cvPoint(95,15), &tFont,
CV_RGB(255,0,0) );
cvPutText( pFrame1, timestr, cvPoint(5,225), &tFont,
CV_RGB(255,0,0) );
cvPutText( pFrame2, timestr, cvPoint(5,225), &tFont,
CV_RGB(255,0,0) );
cvPutText( frame1,
timestr, cvPoint(5,225), &tFont,
CV_RGB(255,0,0) );
cvPutText( frame2,
timestr, cvPoint(5,225), &tFont,
CV_RGB(255,0,0) );
// 显示实时的摄像头视频
cvShowMultiImages( "Multiple Cameras", 4, pFrame1, pFrame2, frame1, frame2 );
//cvWaitKey(33);
int key = cvWaitKey(33);
if( key == 27 ) break;
cvReleaseImage(&frame1);
cvReleaseImage(&frame2);
cvReleaseImage(&frame_gray_1);
cvReleaseImage(&frame_gray_2);
cvReleaseImage(&frame_canny_1);
cvReleaseImage(&frame_canny_2);
camera1.CloseCamera(); //可不调用此函数,CCameraDS析构时会自动关闭摄像头
camera2.CloseCamera();
cvDestroyWindow("Multiple Cameras");
在 Project -& Properties -& Configuration Properties -&
Linker -& Input 的 Additional Dependencies 中,需要添加以下库文件:
odbc32.lib
odbccp32.lib
cxcore200.lib
highgui200.lib
在编译以上程序时,可能会出现以下几种错误(参见 ):
1& ../../../winnt.h(222) : error C4430: missing type
specifier - int assumed. Note: C++ does not
2& ../../../winnt.h(222) : error C2146: syntax error : missing
';' before identifier 'PVOID64'
3& ../../../winnt.h(5940) : error C2146: syntax error : missing
';' before identifier 'Buffer'
对于第1类错误,可以用wd4430来解决,具体的在Project -& Properties -&
Configuration Properties -& Linker -& Command Line的
Additional Options 中添加 ‘/wd4430’& 即可。
对于第2类错误,一般可通过调整 DirectShow/Include 在 Tools -& Options -&
Projects and Solutions -& VC++ Directories -& Show
Directories for && Include Files 中的位置(把它下移到最下面),然后把 Project
-& Properties -& Configuration Properties && C/C++ 中的
Additional Include Directories
里面的内容(../../../../include)删掉,重新编译,PVOID64的错误就会消失,原因如下:
POINTER_64 是一个宏,在64位编译下起作用,它包含在SDK目录下的BASETSD.H中(Microsoft
Visual Studio 8/VC/PlatformSDK/Include/basetsd.h(23):#define
POINTER_64
__ptr64),但DXSDK自己也带了一个basetsd.h,里面没有定义POINTER_64,从而导致出错,只需要改变
include files 的优先级即可。
当然,也可以改写 winnt.h 中的代码,在下面这两行:
typedef& void&
typedef& void&
*POINTER_64& PVOID64;
之前增加一行:
#define& POINTER_64&
不过最好不要轻易改写 winnt.h 。
大恒sv2001fc相机能找到,但是图像是黑色的,不知道原因,
如果有人解决了请发我一份: ylp@aleader.hk
您好,我运行程序的时候出现错误
CameraDS.obj : error LNK2001: unresolved external symbol
IID_IAMStreamConfig
1&CameraDS.obj : error LNK2001: unresolved external symbol
FORMAT_VideoInfo
1&CameraDS.obj : error LNK2001: unresolved external symbol
MEDIASUBTYPE_RGB24
及其他类似问题
但是strmiids.lib文件已经包含了。
请问您知道原因么?
Win7 64 + VS 2010 + openCV 2.4.4
你好,第一个程序摄像头图片一闪而过
好,我现在在做一个调用四个摄像头的程序,本来是用了opencv,但是发现最多只能调用两个。因此用了directshow,程序生成没有错误,但是会
弹出Debug Assertion Failed,
Expression:_CrtIsValidHeapPointer(pUserData)的问题,后来发现错误出在CameraDS.cpp中,因为
只要移去这个cpp文件就能正常运行(ps:我没有用到它,只是放入了项目中)。我不知道问题出在哪里,希望得到帮助。谢谢了!!(ps:opencv最
多只能打开两个camera吗)
回复Derek_yuli:你好,我这按博主的步骤,添加头文件,写程序,最后编译报了个
fatal error C1083: 无法打开包括文件:“qedit.h”: No such file or
貌似我在下载的那个文件里没看到directshow的源文件,你有吗?给我发一份吧,谢谢,cxf.
ReadCamera.exe 中的 0x00c73b17 处未处理的异常:
0xC0000005: 读取位置 0x 时发生访问冲突,这个问题问题代码出现在
m_pSampleGrabber-&GetCurrentBuffer(&m_nBufferSize,
(long*)m_pFrame-&imageData);求教,这是什么问题
你好,我演示你的第一个程序,果真出现你说的有个是灰度的,但是还有个问题,它摄像头都是一闪而过啊,根本都读不出来,求帮忙下啊~~(平台VC6.0+opencv1.0),对了你下面那个别人的代码演示也有错误啊,是版本的问题吗?求帮忙下啊!
好,看了好几篇你的关于双目视觉方面的文章,我有几个问题想请教你一下:1、关于摄像头的选择,希望你可以给我推荐几款可以用来做双目的摄像头。如果知道
价钱,麻烦也贴出来。2,我能把《基于opencv的计算机视觉技术实现》这里面的程序给跑通和看懂,做出简单图像的三维重建,但是复杂图像的三维重建相
当慢,这应该是算法的原因还是其他原因(图片大小为480*320)?3、关于三维重建最后的给图片上色,颜色复原的问题,这个问题现在都没有什么思路,
希望您能帮我一下,我的企鹅是
我的第一个程序可以运行,有图像,边缘检测的程序就是灰色的窗口,请问一下什么情况?
博主您好!
我想问下您是如何获取网络摄像头的实时视频图像的呢?USB的我尝试过,但是用网线的一直没思路。。。
楼主,我用了CvCapture* capture1 =
cvCreateCameraCapture( 1 );
CvCapture* capture2 = cvCreateCameraCapture( 2 );
这样两句代码,可以读出两个相同的摄像头啊
CameraDS.h CameraDS.cpp
我已经下下来了,那个目录DirectShow是什么意思啊,新手啊,王大侠指教
1&------ 已启动生成: 项目: 1, 配置: Debug Win32 ------
1&正在链接...
1&LINK : fatal error LNK1104: 无法打开文件“‘/wd4430’.obj”
1&生成日志保存在“file://c:\Users\gangpangzi\Desktop\opencv\1\1\1\Debug\BuildLog.htm”
1&1 - 1 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
1&------ 已启动生成: 项目: 2, 配置: Debug Win32
1&正在编译...
1&d:\users\dinzhihu\documents\visual studio
2008\projects\多摄像头视频处理\2\camerads.h(26) : fatal error C1083:
无法打开包括文件:“DirectShow/Include/qedit.h”: No such file or
1&CameraDS.cpp
1&c:\users\dinzhihu\desktop\camerads\camerads\camerads.cpp(24) :
warning C4627: “#include "CameraDS.h"”: 在查找预编译头使用时跳过
1& 将指令添加到“stdafx.h”或重新生成预编译头
1&c:\users\dinzhihu\desktop\camerads\camerads\camerads.cpp(470)
: fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include
"stdafx.h"”?
1&正在生成代码...
1&生成日志保存在“file://d:\Users\dinzhihu\Documents\Visual Studio
2008\Projects\多摄像头视频处理\2\Debug\BuildLog.htm”
1&2 - 2 个错误,1 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
楼主 一直在学习你的帖子帮我看看这个什么问题啊急,。。
请问你用的网络摄像头有没有去掉自动对焦?autofocus
disable?我听说有人说自动对焦会对后期算法影响很大?
直接用directshow看,看opencv也相当是一个分时占用处理过程
我运行这个程序时,在“
hr = m_pGraph-&Connect(m_pCameraOutput, m_pGrabberInput);
hr = m_pGraph-&Connect(m_pGrabberOutput,
m_pNullInputPin);”出问题。提示:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic
information found.
Loaded 'C:\Program Files\Common Files\Nero\DSFilter\NeVideo.ax', no
matching symbolic information found.
The thread 0x858 has exited with code 0 (0x0).
The program 'C:\Documents and
Settings\wzlq\桌面\Camerads\CameraDS\Debug\camerads.exe' has exited
with code 0 (0x0).
这是什么原因?急盼帮助。谢谢
好文章啊,学习了
您好,我是Opencv的初学者,使用最下面的程序编译通过(vs),但运行时在IplImage *pFrame =
camera.QueryFrame()一句出现如下错误
BTMMHOOK 11.07.:47 Thread&0264& Hook DLL
cam.exe 中的 0x00413b17 处最可能的异常: 0xC0000005: 读取位置 0x
时发生访问冲突
对其跟踪发现错误在
IplImage* CCameraDS::QueryFrame()
m_pSampleGrabber-&GetCurrentBuffer(&m_nBufferSize,
(long*)m_pFrame-&imageData);
不知是何原因,请高手指点迷津!
回复wunan1985auto:检查打开摄像头的编号
camera0.OpenCamera(0, false, 320,240)
camera1.OpenCamera(1,false,320,240)
第一个摄像头为0,第二个摄像头为1
回复wunan1985auto:同样的问题,求解
回复wunan1985auto:你好,我出现了和你一样的问题,不知道你是怎么解决的?
您好,我想问一下用这个程序是否可以实现两个以上的摄像头图像采集?我开始实现了,但是后来不小心修改了程序,之后就不能再实现了,不知道是什么原因。请指教!谢谢
我如何将采集到的图像显示到mfc
的picture控件中,因为程序中有while(1)这个死循环,所以根本点不了退出按钮,改怎么处理?
您好,我初学Opencv,想用它来做双目视觉,按照您的步骤做了,可是build不成功,我用的是VC6.0+OpenCV1.0,能否给我发一份您的这部分代码,我的邮箱是,谢谢!
博主真是热心肠
您好,我用的是大恒图像的数字摄像机,安装了他们提供的支持directshow的驱动,能识别出来,提示有两个摄像机(另一个是平常用的视频摄像机),可是窗口显示的是黑色,这是为什么?还有就是如果是两个大恒的数字摄像机,则只能识别出一个.......
回复 pbbok:
我和你遇到一摸一样的问题啊,看来是大恒相机的问题,不知道有没有解决方案啊 唉。[e06]
有找到配置2008使用说明的第二条/Include的存放在“引用文件”下面,我存放在了Include
Files,出现camerads.h(22) : Cannot open include file:
'atlbase.h'…,大侠能不能帮忙看看,谢谢!
基本上跟lz已经做到了一个地方了
现在遇到的一个问题是,我想读取摄像头获取的图像的颜色空间
大多数的摄像头是RGB 有些是YUV的或者两者都是支持的
我得到的一些提示是使用directshow相关的函数来获取
无奈没有深入学习directshow
不知道LZ是否知道一些相关的
那个网址下不到directshow啊?只有类文件和一个main文件。。方便的话就发给我吧,或者我去找您拷一下 我真的是着急用
回复 han872004:
您找到directshow了吗?能给我发一份吗?谢谢了
师兄啊,我也是北航的
能不能把你的directshow目录打个包发给我?我在网上找了半天没没找着。。新版的DirectX
又把directshow去掉了。。
我的邮箱 着急用~在线等~多谢多谢
可以到这里下载:http://www./index.php/使用DirectShow采集图像
问,cvsetcaptureproperty函数是不是有bug?我想利用这个函数将视频跳到第i帧。结果往往是乱跳的。比如我想跳到100帧,结果
cvqueryframe()是从479帧开始的。还有我想利用这个函数将视频跳到第5分10秒处,结果cvqueryframe之后用
cvgetcaptureproperty一看还是乱的。请问lz遇到过么?怎么解决的?谢谢
你用的是 OpenCV2.1 吧?这个版本的视频读写操作都有不少
bug,你换低版本的试试,这个帖子有反映类似问题:http://www./forum/viewtopic.php?t=11276
将CameraDS.h
CameraDS.cpp以及目录DirectShow复制到你的项目中
请问哪里可以获得DirectShow?
我的邮箱是 .cn 大侠能不能给我 保存视频的例子
大侠 我用的是你的方法
也是那个就实现了读取两个摄像头的数据、并进行实时边缘检测的功能,
只 是最后我加保存的时候,用了
cvCreateVideoWriter(&out4.avi&,CV_FOURCC('X',
'V', 'I', 'D'), 26, cvSize( DispImage-&width,
DispImage-&height), 1 );
结果视频的时间不对。
用什么样的方法可以实现更好保存视频呢? 谢谢了
该是你设置的那个帧率(第3个参数:26)的问题。解决的思路我简单说下给你参考:首先在开始进入循环读入帧画面之前,先定义一个空的
videowriter:CvVideoWriter*
wrV,并且设置一个变量保存当前系统时间,然后让程序进入循环跑一段时间,对处理过的帧数计数,获得程序的帧处理速率。再通过
cvWaitKey 输入字符命令来设置 videowriter 的参数,然后进行写入视频的操作。
为什么我用两个摄像头的时候在取帧的时候会出现内存问题呢???
具体什么问题?摄像头未成功打开?贴一下错误提示...
我用OpenCV 2.0,最上面的代码可以正常运行啊。
对于某些无驱摄像头,由于缺少渲染图表,所以opencv不支持。详见我写的这个文档:/oskycar/archive//1573977.html
但是用这个DirectShow采集方案就可以。
最后一个程序在opencv1.0上能运行吗?怎么设置的,请大侠指教
对上面问题的补充:两个摄像机的工作模式是采用两个采集卡,还是一个视频采集卡,如何做到严格意义上的同步?
你好,我用的是普通的网络摄像头,USB口,没有用到采集卡,目前应用上还不要求严格意义上的同步。你的问题不妨到OpenCV中文论坛发帖讨论,谢谢。
你采用directshow从两个摄像头中采集图像时,如何控制同步?
[e01],学习了,感谢分享
我 用上面的程序在 if(! camera1.OpenCamera(0,
false, 320,240)) { fprintf(stderr, &Can not open
camera./n&); return -1; }这运行的结果是Can not open
camera ,为什么,请帮帮忙
我用上面的程序在下面这就出来了,请问为什么,谢谢!
if(! camera1.OpenCamera(0, false, 320,240))
//不弹出属性选择窗口,用代码制定图像宽和高
fprintf(stderr, &Can not open
camera./n&);
return -1;
采用第一种方法同时采集两个摄像头的图像,两个摄像头是相同的型号(设备管理器中的名称相同),每次运行的时候都弹出对话框选择摄像头,能否去掉这个对话框?
这个似乎是系统自有的响应,去不掉,用最下面的 DirectShow
方案可以选摄像头
问个问题,最后那种方法,使用DirectShow采集图像,你创建了两个摄像头类
// 创建2个摄像头类
CCameraDS camera1;
CCameraDS camera2;
我在此基础上,再加一个的时候,出问题了,是不是这种方式只支持2个?
最好把相关代码也贴出来一起分析,DirectShow
一般可以支持2个以上摄像头的。
[e01][e01][e01][e01],opencv2.0和vc太难配置,最后放弃用了1.0
问个问题,我用的是vs2008+opencv2.0,按照上面的步骤设置完了之后,build solution出下面的内容
1&------ Build started: Project: cam, Configuration:
Debug Win32 ------
1&Linking...
1&cam.obj : error LNK2019: unresolved external
symbol _cvDestroyWindow referenced in function _main
1&cam.obj : error LNK2019: unresolved external
symbol _cvWaitKey referenced in function _main
1&cam.obj : error LNK2019: unresolved external
symbol _cvShowImage referenced in function _main
1&cam.obj : error LNK2019: unresolved external
symbol _cvNamedWindow referenced in function _main
1&CameraDS.obj : error LNK2019: unresolved external
symbol _cvReleaseImage referenced in function
&public: void __thiscall
CCameraDS::CloseCamera(void)&
(?CloseCamera@CCameraDS@@QAEXXZ)
1&CameraDS.obj : error LNK2019: unresolved external
symbol _cvFlip referenced in function &public:
struct _IplImage * __thiscall
CCameraDS::QueryFrame(void)&
(?QueryFrame@CCameraDS@@QAEPAU_IplImage@@XZ)
1&CameraDS.obj : error LNK2019: unresolved external
symbol _cvCreateImage referenced in function
&public: struct _IplImage * __thiscall
CCameraDS::QueryFrame(void)&
(?QueryFrame@CCameraDS@@QAEPAU_IplImage@@XZ)
1&C:/Users/enjoy/Documents/Visual Studio
2008/Projects/Project1/cam/Debug/cam.exe : fatal error LNK1120: 7
unresolved externals
1&Build log was saved at
&file://c:/Users/enjoy/Documents/Visual Studio
2008/Projects/Project1/cam/cam/Debug/BuildLog.htm&
1&cam - 8 error(s), 0 warning(s)
你应该是没有添加好OpenCV的连接库文件,导致编译时相关的OpenCV函数不能被识别,详细设置见我的学习笔记(1):http://blog.csdn.net/chenyusiyuan/archive//4582076.aspx
用了一个摄像头,运行环境是vs2005。我拿于仕琪老师《opencv教程》里的例子5-22实验也是这种情况,但我在宿舍用笔记本自带的摄像头却能显
示图像。今天上午我下载了directshow的例子,在vc环境下能跑通且显示图像,但在vs环境下却有错误,请给点建议吧。
这是directshow自带例子build完后的结果:
1&------ Build started: Project: camerads,
Configuration: Debug Win32 ------
1&Linking...
1&LINK : warning LNK4076: invalid incremental status
file './Debug/camerads.ilk'; linking nonincrementally
1&LINK : fatal error LNK1104: cannot open file
'LIBCD.lib'
1&Build log was saved at
&file://e:/camerads/Debug/BuildLog.htm&
1&camerads - 1 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped
==========
可能是你没设置好连接库的路径,注意看下面camerads的使用说明:
//////////////////////////////////////////////////////////////////////
// 使用说明:
// 在 VC6 开发环境下的使用说明:
// 1. 将CameraDS.h CameraDS.cpp以及目录DirectShow复制到你的项目中
// 2. 菜单 Project-&Settings-&Settings
configurations)-&C/C++-&Category(Preprocessor)-&Additional
include directories
// 设置为 DirectShow/Include
// 3. 菜单 Project-&Settings-&Settings
configurations)-&Link-&Category(Input)-&Additional
library directories
// 设置为 DirectShow/Lib
// 在 VS 开发环境下的使用说明:
// 1. 将CameraDS.h CameraDS.cpp复制到你的项目中
// 2. 将DirectShow复制到你的opencv根目录下,菜单
工具-&选项-&项目和解决方案-&vc++目录,把..(你的opencv安装目录)/DirectShow/Include添加到
“引用文件”中$(VCInstallDir)PlatformSDK/include和$(FrameworkSDKDir)include下面任意位置
// 3. 菜单
工具-&选项-&项目和解决方案-&vc++目录,把..(你的opencv安装目录)/DirectShow/Lib添加到“库文件”下面。也可参考使用说明3。
//////////////////////////////////////////////////////////////////////
您好,看到您的文章让我很受启发,我现在正在学习opencv,这几天尝试些一些视频采集的小程序,我试过了你在这片文章中一开始提到的这个视频采集的程序,但是不能显示采集的图像,只有灰色的窗口,请问这是什么原因呢?谢谢
你好,请问你那儿运行第一个程序是两个窗口都是显示灰色吗?是用两个摄像头么?
用 户 名:
评论内容:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1130022次
积分:12708分
排名:第201名
原创:186篇
转载:66篇
评论:1647条
: 不错。。
: @g_idea:8楼正解 给力!
@xiaoxiangyu_tf:你好,我的也是编译成功,运行无结果,你是怎么修改的,谢谢
: @wiki14:你好,麻烦问一下,你非线性滤波的结果弄出来没?
: 先收藏呀,宝藏。
你好。。楼主。。我想问一下针对彩色图像怎么进行小波滤波,滤波之后还是要重构成彩色图像的?
为什么我加入鼠标响应后就是不起作用呢。。。。好郁闷。。没有编译错误,glut32.dll和lib也加...
@sadie_6767:你好!能不能把代码发给我一下啊,opencv初学者,正在学习双目立体标定 ...
请问一下楼主在标定时采用的世界坐标系是什么?我现在在重建三维坐标 ,得出的数据 我自己都不知道是什么...
@匿名用户:你好,请问血氧数据你找到了吗?能不能发我一份,谢谢
服务热线:400-600-2320
京&ICP&证&070598&号
北京创新乐知信息技术有限公司 版权所有
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
Copyright & , CSDN.NET, All Rights
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://counter.csdn.net/pv.aspx?id=24" BORDER="0" HEIGHT="0" WIDTH="0"
ALT="VC+OpenCV+DirectShow&的多个摄像头同步工作"
TITLE="VC+OpenCV+DirectShow&的多个摄像头同步工作" />
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 tof摄像头 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信