opencv笔记相机调用
opencv笔记8----从大恒工业摄像头读取图像
2013-10-25 10:31 3280人阅读 评论(9) 收藏 举报
采用大恒MER系列工业摄像机,不能用OpenCV自带函数打开摄像头,需要用厂商提供的API
工业摄像头采集的图片格式为BYTE,opencv需要从内存中读取BYTE,转化成IplImage *(in C) 或者Mat( in c++)
[cpp] view plain copy print?
1. #include \2. #include \3. #include
4. #include
8. GX_DEV_HANDLE hDevice = NULL; 9. static int keycode; 10.
11. MERCamera::MERCamera() 12. {
13. GX_STATUS status = GX_STATUS_SUCCESS; 14. int64_t nValue = 0; 15.
16. GXInitLib();
17. status = GXOpenDeviceByIndex(1, &hDevice); 18. if(status != GX_STATUS_SUCCESS) 19. {
20. std::cout<<\21. return; 22. } 23. } 24.
25. MERCamera::~MERCamera() 26. {
27. GX_STATUS emStatus = GX_STATUS_SUCCESS;
28. if(m_bIsSnaping) 29. {
30. EndContinuesMode(); 31. } 32.
33. emStatus = GXCloseDevice(hDevice); 34. if(emStatus != GX_STATUS_SUCCESS) 35. {
36. std::cout<<\37. } 38.
39. //关闭设备库
40. emStatus = GXCloseLib();
41. if(emStatus != GX_STATUS_SUCCESS) 42. {
43. std::cout<<\44. } 45. } 46.
47. void MERCamera::InitCamera() 48. {
49. GX_STATUS status = GX_STATUS_SUCCESS; 50. int64_t nValue = 0; 51.
52. m_bIsSnaping = false;
53. status = GXGetEnum(hDevice, GX_ENUM_PIXEL_FORMAT, &m_nPixelFomat); 54. //获取宽度(需在停止采集状态下设置)
55. status = GXGetInt(hDevice, GX_INT_WIDTH, &nValue); 56. m_nImageWidth = (int)nValue; 57.
58. //获取高度(需在停止采集状态下设置)
59. status = GXGetInt(hDevice, GX_INT_HEIGHT, &nValue); 60. m_nImageHeight = (int)nValue; 61.
62. //获取图象数据大小
63. status = GXGetInt(hDevice, GX_INT_PAYLOAD_SIZE, &nValue); 64. m_nPayLoadSize = (int)nValue;
65. //设置采集模式。一般相机的默认采集模式为连续模式。 66. int64_t nAcqMode = GX_ACQ_MODE_CONTINUOUS;
67. GX_ENUM_ACQUISITION_MODE, nAcqMode); 68. 69. 70. do 71. { 72. m_pBufferRaw8 = new BYTE[m_nImageWidth * m_nImageHeight]; 73. if (m_pBufferRaw8 == NULL) 74. { 75. status = GX_STATUS_ERROR; 76. break; 77. } 78. 79. //为存储RGB图像数据开辟空间 80. m_pBufferRGB = new BYTE[m_nImageWidth * m_nImageHeight * 3]; 81. if (m_pBufferRGB == NULL) 82. { 83. status = GX_STATUS_ERROR; 84. break; 85. } 86. 87. //为存储原始图像数据开辟空间 88. m_pBufferRaw = new BYTE[m_nPayLoadSize]; 89. if (m_pBufferRaw == NULL) 90. { 91. status = GX_STATUS_ERROR; 92. break; 93. } 94. 95. } while (0); 96. if (status != GX_STATUS_SUCCESS) 97. { 98. if (m_pBufferRaw8 != NULL) 99. { 100. delete[]m_pBufferRaw8; 101. m_pBufferRaw8 = NULL; 102. } 103. if (m_pBufferRaw != NULL) 104. { 105. delete[]m_pBufferRaw; 106. m_pBufferRaw = NULL; 107. } 108. if (m_pBufferRGB != NULL) 109. { 110. delete[]m_pBufferRGB; 111. m_pBufferRGB = NULL; 112. } 113. } 114. 115. } 116. 117. void MERCamera::StartContinuesMode() 118. { 119. GX_STATUS status = GX_STATUS_SUCCESS; 120. InitCamera(); 121. //注册图像处理回调函数 122. status = GXRegisterCaptureCallback(hDevice, NULL,OnFrameCallbackFun); 123. if(!m_bIsSnaping) 124. { 125. //发送开采命令 126. status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_START); 127. m_bIsSnaping = true; 128. } 129. while(1) 130. { 131. if(keycode == 'q') EndContinuesMode(); 132. } 133. } 134. 135. void MERCamera::EndContinuesMode() 136. { 137. GX_STATUS status = GX_STATUS_SUCCESS; 138. if(m_bIsSnaping) 139. { 140. //发送停采命令 141. status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_STOP); 142. //注销采集回调 143. status = GXUnregisterCaptureCallback(hDevice); 144. m_bIsSnaping = false; 145. } 146. } 147. //fuction:ProcessImage(BYTE* pImageBuf) 148. //功能:raw格式图像转换为RGB图 149. void MERCamera::ProcessImage(BYTE *pImageBuf) 150. { 151. //m_objDrawImg.Enter(); 152. memcpy(m_pBufferRaw, pImageBuf, m_nPayLoadSize); 153. 154. switch(m_nPixelFomat) 155. { 156. //当数据格式为12位时,位数转换为4-11 157. case GX_PIXEL_FORMAT_MONO12: 158. //将12位格式的图像转换为8位格式 159. DxRaw16toRaw8(m_pBufferRaw, m_pBufferRaw8, m_nImageWidth, m_nImageHeight, DX_BIT_4_11); 160. 161. //将转换完成后的8位图转换为RGB图,以供显示 162. DxRaw8toRGB24(m_pBufferRaw8, m_pBufferRGB, m_nImageWidth, m_nImageHeight, RAW2RGB_NEIGHBOUR, (DX_PIXEL_COLOR_FILTER)NONE, TRUE); 163. break;
相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




