大恒视频采集流程

上传人:pu****.1 文档编号:562874823 上传时间:2023-03-07 格式:DOCX 页数:8 大小:24.55KB
返回 下载 相关 举报
大恒视频采集流程_第1页
第1页 / 共8页
大恒视频采集流程_第2页
第2页 / 共8页
大恒视频采集流程_第3页
第3页 / 共8页
大恒视频采集流程_第4页
第4页 / 共8页
大恒视频采集流程_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《大恒视频采集流程》由会员分享,可在线阅读,更多相关《大恒视频采集流程(8页珍藏版)》请在金锄头文库上搜索。

1、用OpenCV进行大恒CG400CG410视频采集卡的视频读取转载标签: 分类: opencv 杂谈最近用到红外摄像头,要用到视频采集卡,采用的是大恒CG410的板子,CG410是CG400 的升级版,虽然驱动不一样,SDK和适用环境是一样的。这是使用的是win7 32位系统。大恒的SDK的事例都是都是MFC的代码,奈何我需要的是在控制台下进行摄像头的读取, 并转换到OpenCV可以识别的图像数据格式IplImage或者Mat结构,这个使用的是前者。 下面是解决方法:在项目的库中包含CGVideo.libCGVidEx.lib头文件记得加入windows.h,因为要使用到windows句柄 代

2、码如下:1:#include opencv2/core/core.hpp2:#include opencv2/highgui/highgui.hpp3:#include opencv2/imgproc/imgproc.hpp4:#include opencv2/video/video.hpp5:#include 6:#include /8:#include CGVideo.h9:#include CGDef.h10:#include CGVidEx.h11:12:using namespace std;13:using namespace cv;14:15:int main()16:17:/初

3、始化所有成员变量,同时打开图像卡*/18:CGSTATUS status = CG_OK;19:HCG hcg = NULL;20:21:/打开图像卡1,返回状态值22:status = BeginCGCard(1, &hcg);23:24:/检验函数执行状态,如果失败,则返回错误状态消息框*/25:CG_VERIFY(status);26:27: /初始化图像卡硬件状态,用户也可以在其他位置初始化图像卡,28: /但应保证图像卡已经打开,建议用户在应用程序初始化时,同时初始化图像卡硬件。29: /设置视频制式(PAL / NTSC),由当前视频源制式决定30: CGSetVideoStand

4、ard(hcg, PAL);31:32: /扫描模式,包括 FRAME、FIELD33: CGSetScanMode(hcg, FRAME);34:35: /晶振,包括 CRY_OSC_35M、CRY_OSC_2 8M36: /对于 DH-CG300 图像卡,一般为 CRY_OSC_35M,37: /对于 DH-QP300 图像卡,一般为 CRY_OSC_2 8M,38: /其他类型图像卡没有此硬件设置,但可以调用此接口,并返回CG_NOT_SUPPORT_INTERFACE信息39:40: CGSelectCryOSC(hcg, CRY_OSC_35M);41:42: /视频格式,即采集图像

5、数据描述方式,包括YUV422、RGB888、RGB565、RGB555、RGB8888、ALL8BIT、LIMITED8BIT,43: /在采集图像到屏幕时,需要保证视频格式和当前系统屏幕位深度一致,而采集到内存没有此限制。44: CGSetVideoFormat(hcg, RGB888);45:46:47: /视频源路VIDEO_SOURCE包括视频类型和序号,48: /各种图像卡支持的视频源路不尽相同,请参看相应硬件说明49: VIDEO_SOURCE source;50: source .type = COMPOSITE_VIDEO; /视频类型为复合视频51: source.nInd

6、ex = 0; /序号为 052: CGSetVideoSource(hcg, source);53:54: /视频输入窗口,即视频输入范围,输入窗口取值范围:55: /对于视频制式为PAL 制,水平方向为0-768,垂直方向为0-57656: /对于视频制式为NTSC 制,水平方向为0-768,垂直方向为0-57657: /视频窗口左上角X坐标和窗口宽度应为4的倍数,左上角Y坐标和窗口高度应为2的倍数58: CGSetInputWindow(hcg, 0, 0, 7 68, 576); /视频输入窗口取最大59:60:61: /视频输出窗口,即视频输出范围,输出窗口取值范围必须在输入窗口范围

7、以内,62: /视频窗口左上角X坐标和窗口宽度应为4的倍数,左上角Y坐标和窗口高度应为2的倍数63: /在采集到屏幕时,输出窗口的起始位置为图像屏幕输出位置的屏幕坐标,64: /在采集到内存时,输出窗口的起始位置设置为(0, 0)即可。65:66: CGSetOutputWindow(hcg, 0, 0, 768, 576);67:68: /初始化BITMAPINFO结构指针69: BITMAPINFO *pBmpInfo = NULL;70: BYTE *pInfoBuffer = NULL;71: BYTE *pImageBuffer = NULL; /BIMTAPINFO 存储缓冲区,m

8、_pBmpInfo 即扌旨向此缓冲区72:73: BYTE *pS tat icBuffer = NULL; /静态内存地址扌旨针74: HANDLE handle = NULL; /静态内存描述句柄75:76: /采集1帧图像到内存,采集完成后停止77: while (TRUE)78:79: status = CGSnapShot(hcg, 0, 0, TRUE, 1);80: CG_VERIFY(status);81:82: if (CG_SUCCESS(status)83:84: pInfoBuffer = new BYTEsizeof(BITMAPINFO);85: if (pInfo

9、Buffer)86: 87: /m_pBmpInfo即扌旨向m_chBmpBuf缓冲区,用户可以自己分配BTIMAPINFO缓冲区88:89: pBmpInfo = (BITMAPINFO *)pInfoBuffer;90:91:92: /初始化BITMAPINFO结构,此结构在保存bmp文件、显示采集图像时使用93:94: pBmpInfo-bmiHeader.biSize = sizeof(BITMAPINFOHEADER);95:96: /图像宽度,一般为输出窗口宽度97: pBmpInfo-bmiHeader.biWidth = 768;98:99: /图像高度,根据扫描模式(FRAM

10、E/FIELD)的不同100: /FRAME制下,一般为输出窗口高度101: /FIELD制下,一般为输出窗口高度的一半102: pBmpInfo-bmiHeader.biHeight = 576;103:104: /图像位深度,由视频格式确定,105: /采集图像视频格式有 RGB565、RGB555、RGB888、ALL8BIT 等,106: /如果使用CGDateTransfrom函数,则将15,16位数据转换为24位107: pBmpInfo-bmiHeader.biBitCount = 24;108:109: /以下设置一般相同,110: /对于低于8位的位图,还应设置相应的位图调色

11、板111: pBmpInfo-bmiHeader.biPlanes = 1;112: pBmpInfo-bmiHeader.biCompression = BI_RGB;113: pBmpInfo-bmiHeader.biSizeImage = 0;114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157pBmpInfo-bmiHeader.biXPelsPerMeter = 0; pBm

12、pInfo-bmiHeader.biYPelsPerMeter = 0;pBmpInfo-bmiHeader.biClrUsed = 0; pBmpInfo-bmiHeader.biClrImportant = 0;/分配图像缓冲区,一般用来存储采集图像/用户可以将设备静态内存的图像数据直接通过指针或/用CGDataTransfrom函数拷贝到图像缓冲区,然后做进一步的处理,/一般图像缓冲区大小由输出窗口大小和视频格式确定。 pImageBuffer = new BYTE7 68 * 57 6 * 3;if (pImageBuffer)/锁定指定位置的静态内存,/偏移由图像大小和图像序号确定,

13、锁定大小为图像大小/用户可以在任何时候锁定指定位置的静态内存,然后通过pLinearAddr指针访问相应的内存。 status = CGStaticMemLock(0, 768 * 576 * 3, &handle, (VOID *)&pStaticBuffer); if (CG_SUCCESS(status)/将静态内存中的图像传递到用户缓冲区,同时进行格式转换。/如果静态内存中图像为15、16、32位,则转换为24位。/由于图像卡采集到静态内存的图像数据是正向存放,/而Windows中处理的位图数据需要倒置,因此一般还要将图像倒置。CGDa taTransform(pImageBuffer

14、, /图像缓冲区 pStati cBuffer, /静态内存768, /图像宽度576, /图像高度24, /图像位深度TRUE /是否倒置图像);CGStaticMemUnlock(handle); /解除静态内存锁定CvSize n_size = cvSize(768,576);IplImage* frame = cvCreateImageHeader( n_size, IPL_DEPTH_8U, 3 ); frame-imageData = (char *)pImageBuffer;cvNamedWindow( test, CV_WINDOW_AUTOSIZE );cvShowImage(test,frame);cvWaitKey(20);delete pImageBuffer; /释放图像缓冲 cvReleaseImage(&frame);158:delete pInfoBuffer; /释放文件信息缓冲159:160:161:162:163:/关闭图像卡1164:status = EndCGCard(hcg);165:CG_VER

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号