赞
踩
这一节是显示相机视锥及图像,使相机空间位置更加立体。官方文档内容为:
当然,主要的函数就是 WCameraPosition
// // Created by zzl on 2020/11/15. // // system #include <iostream> // Eigen 一定要在OpenCV前面 #include "eigen3/Eigen/Core" #include "eigen3/Eigen/Geometry" // OpenCV #include "opencv2/core.hpp" #include "opencv2/imgcodecs.hpp" #include "opencv2/calib3d.hpp" #include "opencv2/viz.hpp" #include "opencv2/core/eigen.hpp" // 要在Eigen 头文件后面 using namespace std; using namespace cv; int main(int argc,char** argv){ //-- 生成窗口 viz::Viz3d mainWindow("Main_Window"); //-- 创建Camera类、设置相机位置 //--- Camera类是计算相机参数的一个类。我们设置一个3x3的内参数,fx = 700 ,fy = 700 ,cx = 320, cy = 240 Matx33f intrisicParams(700.0,0.0,320.0,0.0,700.0,240.0,0.0,0.0,1.0); // 内参矩阵 viz::Camera mainCamera(intrisicParams,Size(640,480)); // 初始化相机类 // --- 导入图像 Mat image = imread("./data/chessboard.png",0); if(image.empty()) return -1; viz::WCameraPosition camParams(mainCamera.getFov(),image,1.0,viz::Color::white()); // 相机参数设置 Affine3f camPosition(Mat::eye(3,3,CV_32F),Vec3f(0,0,0)); //-- 显示 mainWindow.showWidget("Coordinate",viz::WCoordinateSystem(),Affine3f::Identity()); mainWindow.showWidget("Camera",camParams,camPosition); mainWindow.spin(); //-- 以上为单个相机,再加入一个相机 viz::WCameraPosition camParams_2(mainCamera.getFov(),image,1.0,viz::Color::green()); // 2号相机参数设置 Eigen::AngleAxisf rotateVec(-CV_PI / 2,Eigen::Vector3f(0,1,0)); // 涉及绕轴的旋转矩阵的计算,所以引入了Eigen 库 Mat rotationMatrix; eigen2cv(rotateVec.matrix(),rotationMatrix); Affine3f camPosition_2(rotationMatrix,Vec3f(1.5,0,1.5)); mainWindow.showWidget("Coordinate",viz::WCoordinateSystem(),Affine3f::Identity()); mainWindow.showWidget("Camera",camParams,camPosition); mainWindow.showWidget("Camera_2",camParams_2,camPosition_2); mainWindow.spin(); cout<<"Hello World"<<endl; return 0; }
cmake_minimum_required(VERSION 3.2) project(CylinderDisplay) set(CMAKE_PREFIX_PATH "/home/zzl/opencv420/build/install/") // 我装了两个OpenCV版本 find_package(OpenCV 4 REQUIRED) message(STATUS "OpenCV library status:") message(STATUS " OpenCV Version: ${OpenCV_VERSION}" ) find_package(Pangolin) find_package(Eigen3) set(CMAKE_CXX_STANDARD 17) include_directories(${OpenCV_INCLUDE_DIRS}) include_directories(${EIGEN3_INCLUDE_DIR}) add_executable(Blog cylinderBlog.cpp) target_link_libraries(Blog ${OpenCV_LIBS} )
如果遇到平移向量不更新,可以尝试更换OpenCV版本(OpenCV3.4.2 + VTK7.1.1 有这个Bug,我更换到OpenCV 3.4.0 或者 OpenCV 4.2.0解决问题)
目前我使用 OpenCV 4.2.0 + VTK 7.1.1 一切正常
下一步博客更新计划:构造一个虚拟的标定环境,用虚拟相机采集图像,然后执行单目标定~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。