opencv笔记相机调用

2019-08-31 09:00

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 5. using namespace cv; 6. 7.

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;


opencv笔记相机调用.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015年电大专科行政管理监督学试题及答案小抄

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: