基本思想:记录学习oak基本使用,学习demo和oak官方视频教程记录
一、读取左相机的灰度图
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 mono=pipeline.create<dai::node::MonoCamera>();
mono->setBoardSocket(dai::CameraBoardSocket::LEFT);
auto xlinkOut=pipeline.create<dai::node::XLinkOut>();
xlinkOut->setStreamName("left");
mono->out.link(xlinkOut->input);
dai::Device device(pipeline);
auto queue=device.getOutputQueue("left");
auto frame=queue->get<dai::ImgFrame>();
auto image=frame->getCvFrame();
cv::imwrite("a.jpg",image);
return 0;
}
测试结果
取帧显示
#include <chrono>
#include "utility.hpp"
#include "depthai/depthai.hpp"
int main(int argc, char** argv) {
dai::Pipeline pipeline;
//定义左相机
auto mono=pipeline.create<dai::node::MonoCamera>();
mono->setBoardSocket(dai::CameraBoardSocket::LEFT);
//定义输出
auto xlinkOut=pipeline.create<dai::node::XLinkOut>();
xlinkOut->setStreamName("left");
//相机和输出链接
mono->out.link(xlinkOut->input);
//结构推送相机
dai::Device device(pipeline);
//取帧显示
auto queue=device.getOutputQueue("left");
while(1){
auto frame=queue->get<dai::ImgFrame>();
auto image=frame->getCvFrame();
cv::imshow("image",image);
cv::waitKey(1);
cv::imwrite("a.jpg",image);
}
return 0;
}
二、双目获取帧和彩色获取帧
#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 xlinkLeftOut=pipeline.create<dai::node::XLinkOut>();
xlinkLeftOut->setStreamName("left");
auto xlinkRightOut=pipeline.create<dai::node::XLinkOut>();
xlinkRightOut->setStreamName("right");
//相机和输出链接
Leftmono->out.link(xlinkLeftOut->input);
Rigthmono->out.link(xlinkRightOut->input);
//结构推送相机
dai::Device device(pipeline);
//取帧显示
auto Leftqueue=device.getOutputQueue("left",1);//maxsize 代表缓冲数据
auto Rightqueue=device.getOutputQueue("right",1);//maxsize 代表缓冲数据
while(1){
auto Leftframe=Leftqueue->get<dai::ImgFrame>();
auto Rightframe=Rightqueue->get<dai::ImgFrame>();
auto Leftimage=Leftframe->getCvFrame();
auto Rightimage=Rightframe->getCvFrame();
cv::Mat result;
cv::hconcat(Leftimage, Rightimage, result);
cv::imshow("image",result);
cv::waitKey(1);
}
return 0;
}
测试结果
彩色相机,这个例子官方demo是存在的
#include <chrono>
#include "utility.hpp"
#include "depthai/depthai.hpp"
int main(int argc, char** argv) {
dai::Pipeline pipeline;
//定义左相机
auto mono=pipeline.create<dai::node::ColorCamera>();
mono->setBoardSocket(dai::CameraBoardSocket::RGB);
//定义输出
auto xlinkOut=pipeline.create<dai::node::XLinkOut>();
xlinkOut->setStreamName("rgb");
//相机和输出链接
mono->video.link(xlinkOut->input);
;
//结构推送相机
dai::Device device(pipeline);
//取帧显示
auto queue=device.getOutputQueue("rgb",1);//maxsize 代表缓冲数据
while(1){
auto frame=queue->get<dai::ImgFrame>();
auto image=frame->getCvFrame();
cv::imshow("image",image);
cv::waitKey(1);
}
参考:
OpenCV CEO教你用OAK(一)_哔哩哔哩_bilibili