【Smart_Point】unique_ptr中独占指针使用MakeFrame
生活随笔
收集整理的這篇文章主要介紹了
【Smart_Point】unique_ptr中独占指针使用MakeFrame
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. DFrame使用方法
std::unique_ptr<deptrum::Frame> MakeFrame(deptrum::FrameType frame_type,int width,int height,int bytes_per_pixel,void* data,uint64_t timestamp,int index,float temperature) {std::unique_ptr<deptrum::Frame> frame{std::make_unique<deptrum::Frame>()};
?frame->index = index;frame->size = width * height * bytes_per_pixel;frame->data = data;frame->timestamp = timestamp;frame->frame_type = frame_type;frame->temperature = temperature;frame->rows = height;frame->cols = width;frame->bytes_per_pixel = bytes_per_pixel;return frame;
}
std::unique_ptr<deptrum::Frame> MakeFrame(deptrum::FrameType frame_type,int width,int height,int bytes_per_pixel,void* data,uint64_t timestamp = 0,int index = 0,float temperature = 0);
?
} // namespace depth
struct DFrame : public Frame {DFrame(){};DFrame(int rows, int cols, int bytes_per_pixel, FrameType frame_type, void* data) {this->index = 0;this->size = rows * cols * bytes_per_pixel;this->cols = cols;this->rows = rows;this->bytes_per_pixel = bytes_per_pixel;this->temperature = 0;this->frame_type = frame_type;this->timestamp = 0;this->data = data;}DFrame(int rows, int cols, int bytes_per_pixel, FrameType frame_type) {this->index = 0;this->size = rows * cols * bytes_per_pixel;this->cols = cols;this->rows = rows;this->bytes_per_pixel = bytes_per_pixel;this->temperature = 0;this->frame_type = frame_type;this->timestamp = 0;this->data = new uint8_t[size];}void FreeData() {if (data) {delete[](uint8_t*) data;data = nullptr;}}~DFrame() {
// if (data&&flag) {
// delete[](uint8_t*) data;
// data = nullptr;
// }
// private flag;
};
void MainWindow::on_pushButton_clicked(bool checked)
{int32_t status=0;
?//1.初始化深度庫DepthMagic* deptrum_depth = nullptr;deptrum_depth = DepthMagic::Create(DepthInputFormat::kUint8);
?DeviceType device_type = DeviceType::kAurora300;if (deptrum_depth->Initialize(FLAGS_config, device_type, 2) != 0) {if(deptrum_depth)DepthMagic::Destroy(deptrum_depth);return;}
?//2.讀圖cv::Mat speckle_image = cv::imread(path_speckle, cv::IMREAD_ANYDEPTH);cv::Mat ir_image=cv::imread(path_ir, cv::IMREAD_ANYDEPTH);cv::transpose(ir_image, ir_image);cv::flip(ir_image, ir_image, 0);cv::resize(ir_image, ir_image, cv::Size(image_output_width_, image_output_height_));
?//3.預處理uint8_t* blurred = new uint8_t[image_input_width_ * image_input_height_];uint8_t* flagged = new uint8_t[image_input_width_ * image_input_height_];Frame *blurred_frame=new Frame; ? blurred_frame->data=blurred;Frame* flagged_frame=new Frame; ? flagged_frame->data=flagged;
?std::shared_ptr<deptrum::Frame> blu_share(blurred_frame,[blurred](deptrum::Frame* blurred_frame) {delete[] blurred;delete blurred_frame;});std::shared_ptr<deptrum::Frame> flg_share(flagged_frame,[flagged](deptrum::Frame* flagged_frame) {delete[] flagged;delete flagged_frame;});status = deptrum_depth->Preprocess(blu_share.get(),flg_share.get(),MakeFrame(deptrum::FrameType::kSpeckleFrame,1280,800,1,speckle_image.data).get());std::cout << "Preprocess status :" << status << std::endl;
?
?//4.深度重建uint16_t depth_roi_mean = 0;uint16_t* depth_image = new uint16_t[400 * 640];status = deptrum_depth->GenerateDepthMap(depth_image,depth_roi_mean,blu_share.get(),MakeFrame(deptrum::FrameType::kIrFrame,400,640,1,ir_image.data).get(),flg_share.get(),1);
?std::cout << "GenerateDepthMap status" << status << std::endl;cv::Mat raw_depth(640, 400, CV_16UC1, depth_image);cv::imwrite("D:\\depthrun\\untitled1\\release\\depth.png", raw_depth * 100);delete[] depth_image;speckle_image.release();ir_image.release();if(deptrum_depth)DepthMagic::Destroy(deptrum_depth);
?
}
總結
以上是生活随笔為你收集整理的【Smart_Point】unique_ptr中独占指针使用MakeFrame的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 泰山石敢当多少钱一块?
- 下一篇: 隆江卤猪脚可以盖盖子吗