当前位置:   article > 正文

2. OpenCV 可视化(Viz)——相机视锥_相机视锥 可视化

相机视锥 可视化

2. OpenCV 可视化(Viz)——相机视锥

这一节是显示相机视锥及图像,使相机空间位置更加立体。官方文档内容为:

在这里插入图片描述

OpenCV_Tutorials

当然,主要的函数就是 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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

CMakeLists.txt

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} )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

如果遇到平移向量不更新,可以尝试更换OpenCV版本(OpenCV3.4.2 + VTK7.1.1 有这个Bug,我更换到OpenCV 3.4.0 或者 OpenCV 4.2.0解决问题)

目前我使用 OpenCV 4.2.0 + VTK 7.1.1 一切正常


下一步博客更新计划:构造一个虚拟的标定环境,用虚拟相机采集图像,然后执行单目标定~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/119741
推荐阅读
相关标签
  

闽ICP备14008679号