diff --git a/cpp/xcamera.h b/cpp/xcamera.h index c0b82ac..03704e1 100644 --- a/cpp/xcamera.h +++ b/cpp/xcamera.h @@ -284,6 +284,62 @@ extern "C" { //输出参数:无 //返回值: 类型(int):返回0表示设置参数成功;否则失败。 virtual int setParamRepetitionExposureNum(int num) = 0; + + //函数名: setParamGrayRectify + //功能: 设置点云灰度补偿参数 + //输入参数:use(开关:1开、0关)、radius(半径:3、5、7、9)、sigma(补偿强度,范围0-100) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int setParamGrayRectify(int use, int radius, float sigma) = 0; + + //函数名: getParamGrayRectify + //功能: 获取点云灰度补偿参数 + //输入参数:无 + //输出参数:use(开关:1开、0关)、radius(半径:3、5、7、9)、sigma(补偿强度,范围0-100) + //返回值: 类型(int):返回0表示获取参数成功;否则失败。 + virtual int getParamGrayRectify(int& use, int& radius, float& sigma) = 0; + + //函数名: setParamBrightnessHdrExposure + //功能: 设置亮度图多曝光参数(最大曝光次数为10次) + //输入参数: num(曝光次数)、exposure_param[6](6个曝光参数、前num个有效)) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int setParamBrightnessHdrExposure(int num, int exposure_param[10]) = 0; + + //函数名:getParamBrightnessHdrExposure + //功能: 设置亮度图多曝光参数(最大曝光次数为10次) + //输入参数:无 + //输出参数:num(曝光次数)、exposure_param[10](10个曝光参数、前num个有效)) + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int getParamBrightnessHdrExposure(int& num, int exposure_param[10]) = 0; + + //函数名: setParamBrightnessExposureModel + //功能: 设置亮度图曝光模式 + //输入参数: model(1:单曝光、2:曝光融合) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int setParamBrightnessExposureModel(int model) = 0; + + //函数名: getParamBrightnessExposureModel + //功能: 获取亮度图曝光模式 + //输入参数: 无 + //输出参数: model(1:单曝光、2:曝光融合) + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int getParamBrightnessExposureModel(int& model) = 0; + + //函数名: setParamBrightnessGain + //功能: 设置亮度图增益 + //输入参数:gain(亮度图增益) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int setParamBrightnessGain(float gain) = 0; + + //函数名: getParamBrightnessGain + //功能: 获取亮度图增益 + //输入参数:无 + //输出参数:gain(亮度图增益) + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int getParamBrightnessGain(float& gain) = 0; }; XEMA_API void* createXCamera(); diff --git a/cpp/xema_camera.cpp b/cpp/xema_camera.cpp index fc149ec..9dd3391 100644 --- a/cpp/xema_camera.cpp +++ b/cpp/xema_camera.cpp @@ -2555,6 +2555,480 @@ namespace XEMA { return DF_SUCCESS; } + + + int XemaCamera::setParamGrayRectify(int use, int radius, float sigma) + { + std::unique_lock lck(command_mutex_, std::defer_lock); + while (!lck.try_lock_for(std::chrono::milliseconds(1))) + { + LOG(INFO) << "--"; + } + + if (radius % 2 != 1 || radius > 9 || radius < 3 || sigma < 1 || sigma > 100) + { + LOG(INFO) << "error param range"; + return DF_FAILED; + } + + LOG(INFO) << "DfSetParamGrayRectify:"; + if (use != 1 && use != 0) + { + std::cout << "use param should be 1 or 0: " << use << std::endl; + return DF_FAILED; + } + + int ret = setup_socket(camera_ip_.c_str(), DF_PORT, g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + ret = send_command(DF_CMD_SET_PARAM_GRAY_RECTIFY, g_sock); + ret = send_buffer((char*)&token, sizeof(token), g_sock); + int command; + ret = recv_command(&command, g_sock); + if (ret == DF_FAILED) + { + LOG(ERROR) << "Failed to recv command"; + close_socket(g_sock); + return DF_FAILED; + } + + if (command == DF_CMD_OK) + { + + ret = send_buffer((char*)(&use), sizeof(int), g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + + ret = send_buffer((char*)(&radius), sizeof(int), g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + + ret = send_buffer((char*)(&sigma), sizeof(float), g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + } + else if (command == DF_CMD_REJECT) + { + close_socket(g_sock); + return DF_BUSY; + } + else if (command == DF_CMD_UNKNOWN) + { + close_socket(g_sock); + return DF_UNKNOWN; + } + + close_socket(g_sock); + return DF_SUCCESS; + } + + + int XemaCamera::getParamGrayRectify(int& use, int& radius, float& sigma) + { + std::unique_lock lck(command_mutex_, std::defer_lock); + while (!lck.try_lock_for(std::chrono::milliseconds(1))) + { + LOG(INFO) << "--"; + } + + LOG(INFO) << "getParamGrayRectify:"; + int ret = setup_socket(camera_ip_.c_str(), DF_PORT, g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + ret = send_command(DF_CMD_GET_PARAM_GRAY_RECTIFY, g_sock); + ret = send_buffer((char*)&token, sizeof(token), g_sock); + int command; + ret = recv_command(&command, g_sock); + if (ret == DF_FAILED) + { + LOG(ERROR) << "Failed to recv command"; + close_socket(g_sock); + return DF_FAILED; + } + + if (command == DF_CMD_OK) + { + + ret = recv_buffer((char*)(&use), sizeof(int), g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + + ret = recv_buffer((char*)(&radius), sizeof(int), g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + + ret = recv_buffer((char*)(&sigma), sizeof(float), g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + } + else if (command == DF_CMD_REJECT) + { + close_socket(g_sock); + return DF_BUSY; + } + else if (command == DF_CMD_UNKNOWN) + { + close_socket(g_sock); + return DF_UNKNOWN; + } + + close_socket(g_sock); + return DF_SUCCESS; + } + + //函数名: setParamBrightnessHdrExposure + //功能: 设置亮度图多曝光参数(最大曝光次数为10次) + //输入参数: num(曝光次数)、exposure_param[6](6个曝光参数、前num个有效)) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + int XemaCamera::setParamBrightnessHdrExposure(int num, int exposure_param[10]) + { + std::unique_lock lck(command_mutex_, std::defer_lock); + while (!lck.try_lock_for(std::chrono::milliseconds(1))) + { + LOG(INFO) << "--"; + } + + if (num < 2 || num>10) + { + LOG(INFO) << "Error num:" << num; + return DF_FAILED; + } + + LOG(INFO) << "setParamBrightnessHdrExposure:"; + int ret = setup_socket(camera_ip_.c_str(), DF_PORT, g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + ret = send_command(DF_CMD_SET_PARAM_BRIGHTNESS_HDR_EXPOSURE, g_sock); + ret = send_buffer((char*)&token, sizeof(token), g_sock); + int command; + ret = recv_command(&command, g_sock); + if (ret == DF_FAILED) + { + LOG(ERROR) << "Failed to recv command"; + close_socket(g_sock); + return DF_FAILED; + } + + if (command == DF_CMD_OK) + { + int param[11] = { 2,10000,20000,30000,40000,50000,60000,70000,80000,90000,100000 }; + + param[0] = num; + + memcpy(param + 1, exposure_param, sizeof(int) * num); + + ret = send_buffer((char*)(param), sizeof(int) * 11, g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + } + else if (command == DF_CMD_REJECT) + { + close_socket(g_sock); + return DF_BUSY; + } + else if (command == DF_CMD_UNKNOWN) + { + close_socket(g_sock); + return DF_UNKNOWN; + } + + close_socket(g_sock); + return DF_SUCCESS; + } + + int XemaCamera::getParamBrightnessHdrExposure(int& num, int exposure_param[10]) + { + std::unique_lock lck(command_mutex_, std::defer_lock); + while (!lck.try_lock_for(std::chrono::milliseconds(1))) + { + LOG(INFO) << "--"; + } + + LOG(INFO) << "getParamBrightnessHdrExposure:"; + int ret = setup_socket(camera_ip_.c_str(), DF_PORT, g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + ret = send_command(DF_CMD_GET_PARAM_BRIGHTNESS_HDR_EXPOSURE, g_sock); + ret = send_buffer((char*)&token, sizeof(token), g_sock); + int command; + ret = recv_command(&command, g_sock); + if (ret == DF_FAILED) + { + LOG(ERROR) << "Failed to recv command"; + close_socket(g_sock); + return DF_FAILED; + } + + if (command == DF_CMD_OK) + { + int param[11]; + + ret = recv_buffer((char*)(param), sizeof(int) * 11, g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + + memcpy(exposure_param, param + 1, sizeof(int) * 10); + num = param[0]; + + } + else if (command == DF_CMD_REJECT) + { + close_socket(g_sock); + return DF_BUSY; + } + else if (command == DF_CMD_UNKNOWN) + { + close_socket(g_sock); + return DF_UNKNOWN; + } + + close_socket(g_sock); + return DF_SUCCESS; + } + + int XemaCamera::setParamBrightnessExposureModel(int model) + { + std::unique_lock lck(command_mutex_, std::defer_lock); + while (!lck.try_lock_for(std::chrono::milliseconds(1))) + { + LOG(INFO) << "--"; + } + + LOG(INFO) << "setParamBrightnessExposureModel:"; + + int ret = setup_socket(camera_ip_.c_str(), DF_PORT, g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + ret = send_command(DF_CMD_SET_PARAM_BRIGHTNESS_EXPOSURE_MODEL, g_sock); + ret = send_buffer((char*)&token, sizeof(token), g_sock); + int command; + ret = recv_command(&command, g_sock); + if (ret == DF_FAILED) + { + LOG(ERROR) << "Failed to recv command"; + close_socket(g_sock); + return DF_FAILED; + } + + if (command == DF_CMD_OK) + { + + ret = send_buffer((char*)(&model), sizeof(int), g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + } + else if (command == DF_CMD_REJECT) + { + close_socket(g_sock); + return DF_BUSY; + } + else if (command == DF_CMD_UNKNOWN) + { + close_socket(g_sock); + return DF_UNKNOWN; + } + + close_socket(g_sock); + return DF_SUCCESS; + } + + int XemaCamera::getParamBrightnessExposureModel(int& model) + { + std::unique_lock lck(command_mutex_, std::defer_lock); + while (!lck.try_lock_for(std::chrono::milliseconds(1))) + { + LOG(INFO) << "--"; + } + + LOG(INFO) << "getParamBrightnessExposureModel:"; + int ret = setup_socket(camera_ip_.c_str(), DF_PORT, g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + ret = send_command(DF_CMD_GET_PARAM_BRIGHTNESS_EXPOSURE_MODEL, g_sock); + ret = send_buffer((char*)&token, sizeof(token), g_sock); + int command; + ret = recv_command(&command, g_sock); + if (ret == DF_FAILED) + { + LOG(ERROR) << "Failed to recv command"; + close_socket(g_sock); + return DF_FAILED; + } + + if (command == DF_CMD_OK) + { + + ret = recv_buffer((char*)(&model), sizeof(int), g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + } + else if (command == DF_CMD_REJECT) + { + close_socket(g_sock); + return DF_BUSY; + } + else if (command == DF_CMD_UNKNOWN) + { + close_socket(g_sock); + return DF_UNKNOWN; + } + + close_socket(g_sock); + return DF_SUCCESS; + } + + int XemaCamera::setParamBrightnessGain(float gain) + { + std::unique_lock lck(command_mutex_, std::defer_lock); + while (!lck.try_lock_for(std::chrono::milliseconds(1))) + { + LOG(INFO) << "--"; + } + + LOG(INFO) << "setParamBrightnessGain:"; + + int ret = setup_socket(camera_ip_.c_str(), DF_PORT, g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + ret = send_command(DF_CMD_SET_PARAM_BRIGHTNESS_GAIN, g_sock); + ret = send_buffer((char*)&token, sizeof(token), g_sock); + int command; + ret = recv_command(&command, g_sock); + if (ret == DF_FAILED) + { + LOG(ERROR) << "Failed to recv command"; + close_socket(g_sock); + return DF_FAILED; + } + + if (command == DF_CMD_OK) + { + + ret = send_buffer((char*)(&gain), sizeof(float), g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + } + else if (command == DF_CMD_REJECT) + { + close_socket(g_sock); + return DF_BUSY; + } + else if (command == DF_CMD_UNKNOWN) + { + close_socket(g_sock); + return DF_UNKNOWN; + } + + close_socket(g_sock); + return DF_SUCCESS; + } + + int XemaCamera::getParamBrightnessGain(float& gain) + { + std::unique_lock lck(command_mutex_, std::defer_lock); + while (!lck.try_lock_for(std::chrono::milliseconds(1))) + { + LOG(INFO) << "--"; + } + + LOG(INFO) << "getParamBrightnessGain:"; + int ret = setup_socket(camera_ip_.c_str(), DF_PORT, g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + ret = send_command(DF_CMD_GET_PARAM_BRIGHTNESS_GAIN, g_sock); + ret = send_buffer((char*)&token, sizeof(token), g_sock); + int command; + ret = recv_command(&command, g_sock); + if (ret == DF_FAILED) + { + LOG(ERROR) << "Failed to recv command"; + close_socket(g_sock); + return DF_FAILED; + } + + if (command == DF_CMD_OK) + { + ret = recv_buffer((char*)(&gain), sizeof(float), g_sock); + if (ret == DF_FAILED) + { + close_socket(g_sock); + return DF_FAILED; + } + } + else if (command == DF_CMD_REJECT) + { + close_socket(g_sock); + return DF_BUSY; + } + else if (command == DF_CMD_UNKNOWN) + { + close_socket(g_sock); + return DF_UNKNOWN; + } + + close_socket(g_sock); + return DF_SUCCESS; + } + + /************************************************************************************************/ diff --git a/cpp/xema_camera.h b/cpp/xema_camera.h index faed418..7de0dbe 100644 --- a/cpp/xema_camera.h +++ b/cpp/xema_camera.h @@ -230,14 +230,14 @@ extern "C" { //输入参数:use(开关:1开、0关)、depth_filterthreshold(深度图在1000mm距离过滤的噪声阈值) //输出参数: 无 //返回值: 类型(int):返回0表示设置参数成功;否则失败。 - virtual int setParamDepthFilter(int use, float depth_filter_threshold)override; + int setParamDepthFilter(int use, float depth_filter_threshold)override; //函数名: getParamDepthFilter //功能: 设置深度图滤波参数 //输入参数:use(开关:1开、0关)、depth_filterthreshold(阈值0-100) //输出参数: 无 //返回值: 类型(int):返回0表示获取参数成功;否则失败。 - virtual int getParamDepthFilter(int& use, float& depth_filter_threshold)override; + int getParamDepthFilter(int& use, float& depth_filter_threshold)override; //功能: 设置外点过滤阈值 //输入参数:threshold(阈值0-100) @@ -264,6 +264,62 @@ extern "C" { int setParamRepetitionExposureNum(int num)override; + //函数名: setParamGrayRectify + //功能: 设置点云灰度补偿参数 + //输入参数:use(开关:1开、0关)、radius(半径:3、5、7、9)、sigma(补偿强度,范围0-100) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + int setParamGrayRectify(int use, int radius, float sigma)override; + + //函数名: getParamGrayRectify + //功能: 获取点云灰度补偿参数 + //输入参数:无 + //输出参数:use(开关:1开、0关)、radius(半径:3、5、7、9)、sigma(补偿强度,范围0-100) + //返回值: 类型(int):返回0表示获取参数成功;否则失败。 + int getParamGrayRectify(int& use, int& radius, float& sigma)override; + + //函数名: setParamBrightnessHdrExposure + //功能: 设置亮度图多曝光参数(最大曝光次数为10次) + //输入参数: num(曝光次数)、exposure_param[6](6个曝光参数、前num个有效)) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + int setParamBrightnessHdrExposure(int num, int exposure_param[10])override; + + //函数名:getParamBrightnessHdrExposure + //功能: 设置亮度图多曝光参数(最大曝光次数为10次) + //输入参数:无 + //输出参数:num(曝光次数)、exposure_param[10](10个曝光参数、前num个有效)) + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + int getParamBrightnessHdrExposure(int& num, int exposure_param[10])override; + + //函数名: setParamBrightnessExposureModel + //功能: 设置亮度图曝光模式 + //输入参数: model(1:单曝光、2:曝光融合) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + int setParamBrightnessExposureModel(int model)override; + + //函数名: getParamBrightnessExposureModel + //功能: 获取亮度图曝光模式 + //输入参数: 无 + //输出参数: model(1:单曝光、2:曝光融合) + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + int getParamBrightnessExposureModel(int& model)override; + + //函数名: setParamBrightnessGain + //功能: 设置亮度图增益 + //输入参数:gain(亮度图增益) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + int setParamBrightnessGain(float gain)override; + + //函数名: getParamBrightnessGain + //功能: 获取亮度图增益 + //输入参数:无 + //输出参数:gain(亮度图增益) + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + int getParamBrightnessGain(float& gain)override; + public: int undistortBrightnessMap(unsigned char* brightness_map); diff --git a/cpp_example/cpp_example.cpp b/cpp_example/cpp_example.cpp index da298e2..1f16d60 100644 --- a/cpp_example/cpp_example.cpp +++ b/cpp_example/cpp_example.cpp @@ -36,7 +36,7 @@ int main() //连接相机 - ret_code = p_camera->connect(pBaseinfo[0].ip); + ret_code = p_camera->connect(pBaseinfo[0].ip); int width = 0, height = 0; if (0 == ret_code) @@ -130,6 +130,23 @@ int main() { std::cout << "Set Pointcloud Smoothing Error!" << std::endl; } + ret_code = p_camera->setParamGenerateBrightness(2,36000); + if (0 != ret_code) + { + std::cout << "Set Param Generate Brightness Error!" << std::endl; + } + + ret_code = p_camera->setParamBrightnessGain(10); + if (0 != ret_code) + { + std::cout << "Set Param Brightness Gain Error!" << std::endl; + } + + ret_code = p_camera->setParamBrightnessExposureModel(1); + if (0 != ret_code) + { + std::cout << "Set Param Brightness Exposure Model Error!" << std::endl; + } //采集单曝光数据 if (true) diff --git a/cpp_example/xcamera.h b/cpp_example/xcamera.h index c0b82ac..03704e1 100644 --- a/cpp_example/xcamera.h +++ b/cpp_example/xcamera.h @@ -284,6 +284,62 @@ extern "C" { //输出参数:无 //返回值: 类型(int):返回0表示设置参数成功;否则失败。 virtual int setParamRepetitionExposureNum(int num) = 0; + + //函数名: setParamGrayRectify + //功能: 设置点云灰度补偿参数 + //输入参数:use(开关:1开、0关)、radius(半径:3、5、7、9)、sigma(补偿强度,范围0-100) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int setParamGrayRectify(int use, int radius, float sigma) = 0; + + //函数名: getParamGrayRectify + //功能: 获取点云灰度补偿参数 + //输入参数:无 + //输出参数:use(开关:1开、0关)、radius(半径:3、5、7、9)、sigma(补偿强度,范围0-100) + //返回值: 类型(int):返回0表示获取参数成功;否则失败。 + virtual int getParamGrayRectify(int& use, int& radius, float& sigma) = 0; + + //函数名: setParamBrightnessHdrExposure + //功能: 设置亮度图多曝光参数(最大曝光次数为10次) + //输入参数: num(曝光次数)、exposure_param[6](6个曝光参数、前num个有效)) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int setParamBrightnessHdrExposure(int num, int exposure_param[10]) = 0; + + //函数名:getParamBrightnessHdrExposure + //功能: 设置亮度图多曝光参数(最大曝光次数为10次) + //输入参数:无 + //输出参数:num(曝光次数)、exposure_param[10](10个曝光参数、前num个有效)) + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int getParamBrightnessHdrExposure(int& num, int exposure_param[10]) = 0; + + //函数名: setParamBrightnessExposureModel + //功能: 设置亮度图曝光模式 + //输入参数: model(1:单曝光、2:曝光融合) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int setParamBrightnessExposureModel(int model) = 0; + + //函数名: getParamBrightnessExposureModel + //功能: 获取亮度图曝光模式 + //输入参数: 无 + //输出参数: model(1:单曝光、2:曝光融合) + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int getParamBrightnessExposureModel(int& model) = 0; + + //函数名: setParamBrightnessGain + //功能: 设置亮度图增益 + //输入参数:gain(亮度图增益) + //输出参数: 无 + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int setParamBrightnessGain(float gain) = 0; + + //函数名: getParamBrightnessGain + //功能: 获取亮度图增益 + //输入参数:无 + //输出参数:gain(亮度图增益) + //返回值: 类型(int):返回0表示设置参数成功;否则失败。 + virtual int getParamBrightnessGain(float& gain) = 0; }; XEMA_API void* createXCamera(); diff --git a/cpp_example/xemacpp.dll b/cpp_example/xemacpp.dll index e264be6..bb742f1 100644 Binary files a/cpp_example/xemacpp.dll and b/cpp_example/xemacpp.dll differ