#include "camera.h" #include "thread.h" #include #include // 使用std::vector存储所有帧的数据 extern int save_flag; extern bool spec_flag; tomato tomato; void __stdcall onImageDataCallBackFunc(unsigned char * pData, MV_FRAME_OUT_INFO_EX* pFrameInfo, void* pUser); void __stdcall onOfflineCallBackFunc(unsigned int nMsgType, void* pUser); void __stdcall onImageDataCallBackFunc1(unsigned char * pData, MV_FRAME_OUT_INFO_EX* pFrameInfo, void* pUser); void __stdcall onOfflineCallBackFunc1(unsigned int nMsgType, void* pUser); void __stdcall onImageDataCallBackFunc2(unsigned char * pData, MV_FRAME_OUT_INFO_EX* pFrameInfo, void* pUser); void __stdcall onOfflineCallBackFunc2(unsigned int nMsgType, void* pUser); extern void __stdcall RTRGBViewCallback(void* pContext, unsigned char* pRData, unsigned char* pGData, unsigned char* pBData, unsigned long dataLength); extern void __stdcall RTSpecStreamingCallback(void *pContext, unsigned char *pData, unsigned long dataLength); int camStatusret; int camStatusret1; int camStatusret2; extern bool change_passionFlag; extern bool change_tomatoFlag; CameraL::CameraL(QObject *parent) : QObject(parent) { } bool CameraL::initCameraL() { /* * 枚举设备 * */ int device_num = enum_device(); qDebug()<<"找到相机: "<SpecialInfo.stGigEInfo.nCurrentIp & 0xff000000)>>24); // qDebug()<<"nip2; "<<((pstDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0x00ff0000)>>16); // qDebug()<<"nip3; "<<((pstDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0x0000ff00)>>8); // qDebug()<<"nip4; "<<((pstDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff)); ip4 = pstDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff; switch (ip4) { case 100: MV_CC_CreateHandle(&camera_handle1, device_list.pDeviceInfo[i]); break; case 150: MV_CC_CreateHandle(&camera_handle, device_list.pDeviceInfo[i]); break; case 200: MV_CC_CreateHandle(&camera_handle2, device_list.pDeviceInfo[i]); break; default: break; } pstDeviceInfo++; } return true; } bool CameraL::open_camera() { int ret = MV_CC_OpenDevice(camera_handle); int ret1 = MV_CC_OpenDevice(camera_handle1); int ret2 = MV_CC_OpenDevice(camera_handle2); camStatusret2=0; camStatusret1=0; camStatusret=0; if(ret != MV_OK||ret1 != MV_OK||ret2 != MV_OK) { return false; camStatusret2=0; camStatusret1=0; camStatusret=0; } return true; } bool CameraL::start_capture() { int ret2 = MV_CC_StartGrabbing(camera_handle2); int ret1 = MV_CC_StartGrabbing(camera_handle1); int ret = MV_CC_StartGrabbing(camera_handle); if (ret != MV_OK||ret1 != MV_OK||ret2 != MV_OK) { return false; } return true; } bool CameraL::register_image_callback(imageCallbackFunc onImageDataCallBackFunc,imageCallbackFunc onImageDataCallBackFunc1,imageCallbackFunc onImageDataCallBackFunc2) { int ret2 = MV_CC_RegisterImageCallBackForBGR(camera_handle1, onImageDataCallBackFunc, NULL); int ret1 = MV_CC_RegisterImageCallBackForBGR(camera_handle, onImageDataCallBackFunc2, NULL); int ret = MV_CC_RegisterImageCallBackForBGR(camera_handle2, onImageDataCallBackFunc1, NULL); if (ret != MV_OK||ret1 != MV_OK||ret2 != MV_OK) { return false; } return true; } bool CameraL::register_offline_callback(exceptionCallbackFunc onOfflineCallBackFunc, exceptionCallbackFunc onOfflineCallBackFunc1, exceptionCallbackFunc onOfflineCallBackFunc2) { int nRet1 = MV_CC_RegisterExceptionCallBack(camera_handle, onOfflineCallBackFunc2, NULL); int nRet = MV_CC_RegisterExceptionCallBack(camera_handle2, onOfflineCallBackFunc1, NULL); int nRet2 = MV_CC_RegisterExceptionCallBack(camera_handle1, onOfflineCallBackFunc, NULL); if (nRet != MV_OK||nRet1 != MV_OK||nRet2 != MV_OK) { return false; } return true; } bool CameraL::destroy_handle() { int ret = MV_CC_DestroyHandle(camera_handle); if (MV_OK != ret) { return false; } return true; } bool CameraL::destroy_handle1() { int ret = MV_CC_DestroyHandle(camera_handle1); if (MV_OK != ret) { return false; } return true; }bool CameraL::destroy_handle2() { int ret = MV_CC_DestroyHandle(camera_handle2); if (MV_OK != ret) { return false; } return true; } bool CameraL::import_config_file() { if(change_passionFlag&&(!change_tomatoFlag)) { int ret = MV_CC_FeatureLoad(camera_handle, CAMERA_CONFIG_PATH); if(ret != MV_OK) { return false; } int ret2 = MV_CC_FeatureLoad(camera_handle2, CAMERA2_CONFIG_PATH); if(ret2 != MV_OK) { return false; } int ret1 = MV_CC_FeatureLoad(camera_handle1, CAMERAtop_CONFIG_PATH); if(ret1 != MV_OK) { return false; } } if((!change_passionFlag)&&change_tomatoFlag) { int ret = MV_CC_FeatureLoad(camera_handle, CAMERApassion_left_config); if(ret != MV_OK) { return false; } int ret2 = MV_CC_FeatureLoad(camera_handle2, CAMERApassion_right_config); if(ret2 != MV_OK) { return false; } int ret1 = MV_CC_FeatureLoad(camera_handle1, CAMERAtoppassion_top2_config); if(ret1 != MV_OK) { return false; } } return true; } bool CameraL::save_config_file() { int ret = MV_CC_FeatureSave(camera_handle, CAMERA_CONFIG_PATH); if(ret != MV_OK) { return false; } return true; } bool CameraL::set_param(Camera_param param_struct) { camera_param = param_struct; int ret = MV_CC_SetIntValue(camera_handle, "BalanceRatio", camera_param.white_balance_ratio); if (ret != MV_OK) { qDebug()<<"white balance ration set failed"; return false; } ret = MV_CC_SetFloatValue(camera_handle, "ExposureTime", camera_param.exposure_time); if(ret != MV_OK) { qDebug()<<"exposure time set failed"; return false; } ret = MV_CC_SetFloatValue(camera_handle, "Gain", camera_param.gain); if(ret != MV_OK) { qDebug()<<"gain set failed"; return false; } return true; } Camera_param CameraL::get_param() { MVCC_INTVALUE BalanceRatio = {0}; int ret = MV_CC_GetIntValue(camera_handle, "BalanceRatio", &BalanceRatio); if (ret == MV_OK) { camera_param.white_balance_ratio = BalanceRatio.nCurValue; } else { qDebug()<<"get white balance ratio failed"; } MVCC_FLOATVALUE ExposureTime = {0}; ret = MV_CC_GetFloatValue(camera_handle, "ExposureTime", &ExposureTime); if(ret == MV_OK) { camera_param.exposure_time = ExposureTime.fCurValue; } else { qDebug()<<"get exposure time failed"; } MVCC_FLOATVALUE Gain = {0}; ret = MV_CC_GetFloatValue(camera_handle, "Gain", &Gain); if(ret == MV_OK) { camera_param.gain = Gain.fCurValue; } else { qDebug()<<"get gain failed"; } #if 1 qDebug()<< camera_param.white_balance_ratio; qDebug()< m_iHeight || m_cslGreen > m_iHeight || m_cslBlue > m_iHeight || m_cslRed <= 0 || m_cslGreen <= 0 || m_cslBlue <= 0) { m_cslRed = m_iHeight * 3 / 4; m_cslGreen = m_iHeight / 2; m_cslBlue = m_iHeight / 4; } RTSetRGBselect(m_cslRed, m_cslGreen, m_cslBlue); // RTAddRGBCallback(RTRGBViewCallback, nullptr); RTAddStreamingCallback(RTSpecStreamingCallback,nullptr); return true; } bool SpecCamera::cal(unsigned char *pData) { // QTime currenttime = QTime::currentTime(); // qDebug()<<"触发时间:"<