基本思想:继续学习oak的接口函数,具体参考官方demo,自己做下笔记记录一下
看结构写代码比较方便
cmakelists.txt
cmake_minimum_required(VERSION 3.16)
project(depthai)
set(CMAKE_CXX_STANDARD 11)
find_package(OpenCV REQUIRED)
#message(STATUS ${OpenCV_INCLUDE_DIRS})
#添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${CMAKE_SOURCE_DIR}/include/utility)
#链接Opencv库
find_package(depthai CONFIG REQUIRED)
add_executable(depthai main.cpp include/utility/utility.cpp)
target_link_libraries(depthai ${OpenCV_LIBS} depthai::opencv)
main.cpp
#include <chrono>
#include "utility.hpp"
#include "depthai/depthai.hpp"
int main(int argc, char** argv) {
dai::Pipeline pipeline;
//定义左相机
auto Leftmono=pipeline.create<dai::node::MonoCamera>();
Leftmono->setBoardSocket(dai::CameraBoardSocket::LEFT);
auto Rigthmono=pipeline.create<dai::node::MonoCamera>();
Rigthmono->setBoardSocket(dai::CameraBoardSocket::RIGHT);
// 深度模块
auto stereo=pipeline.create<dai::node::StereoDepth>();
stereo->setLeftRightCheck(true);
//相机和输出链接
Leftmono->out.link(stereo->left);
Rigthmono->out.link(stereo->right);
//
//定义输出
auto xlinkDetpth=pipeline.create<dai::node::XLinkOut>();
xlinkDetpth->setStreamName("depth");
auto xlinkdisparity=pipeline.create<dai::node::XLinkOut>();
xlinkdisparity->setStreamName("disparity");
auto xlinkRectifiedLeft=pipeline.create<dai::node::XLinkOut>();
xlinkRectifiedLeft->setStreamName("RectifiedLeft");
auto xlinkRectifiedRight=pipeline.create<dai::node::XLinkOut>();
xlinkRectifiedRight->setStreamName("RectifiedRight");
//连接
stereo->disparity.link(xlinkdisparity->input);
stereo->depth.link(xlinkDetpth->input);
stereo->rectifiedLeft.link(xlinkRectifiedLeft->input);
stereo->rectifiedRight.link(xlinkRectifiedRight->input);
//结构推送相机
dai::Device device(pipeline);
//取帧显示
auto disparityqueue=device.getOutputQueue("disparity",8, false);//maxsize 代表缓冲数据
auto RectifiedLeftqueue=device.getOutputQueue("RectifiedLeft",8, false);//maxsize 代表缓冲数据
auto RectifiedRightqueue=device.getOutputQueue("RectifiedRight",8, false);//maxsize 代表缓冲数据
auto depthqueue=device.getOutputQueue("depth",8, false);//maxsize 代表缓冲数据
while(1){
auto Depthframe=depthqueue->get<dai::ImgFrame>();
auto Depthimage=Depthframe->getCvFrame();
cv::Mat depthFrameColor;
cv::normalize(Depthimage, depthFrameColor, 255, 0, cv::NORM_INF, CV_8UC1);
cv::equalizeHist(depthFrameColor, depthFrameColor);
cv::applyColorMap(depthFrameColor, depthFrameColor, cv::COLORMAP_HOT);
cv::imshow("Depthimage",depthFrameColor);
cv::imwrite("depthFrameColor.jpg",depthFrameColor);
//std::cout<<(int)Depthimage.at<uchar>(40, 40)<<std::endl;
auto disparityframe=disparityqueue->get<dai::ImgFrame>();
auto disparityimage=disparityframe->getCvFrame();
cv::imshow("disparityimage",disparityimage);
cv::imwrite("disparityimage.jpg",disparityimage);
auto RectifiedRightframe=RectifiedRightqueue->get<dai::ImgFrame>();
auto RectifiedRightimage=RectifiedRightframe->getCvFrame();
// cv::imshow("RectifiedRight",RectifiedRightimage);
auto RectifiedLeftframe=RectifiedLeftqueue->get<dai::ImgFrame>();
auto RectifiedLeftimage=RectifiedLeftframe->getCvFrame();
cv::Mat result;
cv::hconcat(RectifiedRightimage, RectifiedLeftimage, result);
cv::imshow("RectifiedRight RectifiedLeft",result);
cv::imwrite("result.jpg",result);
cv::waitKey(1);
}
return 0;
}
测试图片 左右纠正图
视觉差图
深度图(添加了暖色)
参考:
StereoDepth — DepthAI documentation | Luxonis