win10下的eigen+opencv环境配置+GAMES101 作业1


虽然课程有提供配好环境的虚拟机,但我电脑运行起来比较慢...所以在开始学习前配了半天环境XD

环境配置参考,我用的是vs2019,这里记录下遇到的几个问题。

问题

安装OpenCV时报错

mingw32-make[1]: CMakeFiles\Makefile2: No such file or directory
mingw32-make[1]: *** No rule to make target 'CMakeFiles\Makefile2'.  Stop.
mingw32-make: *** [Makefile:179: all] Error 2

解决方法:更改了下目标文件夹解决问题,就很玄学...猜测是因为路径里不能有括号之类的特殊符号?

编译文件时提示 fatal error: Eigen3/Core: No such file or directory

解决方法:在 CMakeLists.txt 里添加

include_directories("你的eigen3路径/Eigen3/include/eigen3")

引入eigen3库用

#include<Eigen/Eigen>

使用opencv相关函数时报错如下

严重性    代码    说明    项目    文件    行    禁止显示状态
错误    LNK2019    无法解析的外部符号 "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPEAX@Z),函数 "public: __cdecl cv::Mat::~Mat(void)" (??1Mat@cv@@QEAA@XZ) 中引用了该符号    D:\code\graphics\Assignment1\frame\out\build\x64-Debug (默认值)\frame    D:\code\graphics\Assignment1\frame\out\build\x64-Debug (默认值)\main.cpp.obj    1    
严重性    代码    说明    项目    文件    行    禁止显示状态
错误    LNK2019    无法解析的外部符号 "void __cdecl cv::error(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *,char const *,int)" (?error@cv@@YAXHAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEBD1H@Z),函数 "public: int const & __cdecl cv::MatSize::operator[](int)const " (??AMatSize@cv@@QEBAAEBHH@Z) 中引用了该符号    D:\code\graphics\Assignment1\frame\out\build\x64-Debug (默认值)\frame    D:\code\graphics\Assignment1\frame\out\build\x64-Debug (默认值)\main.cpp.obj    1    

解决方法:出错原因大约是没找到链接库,网上翻了半天都是c++项目的解法,明显不能用于cmake项目

所以是时候学一波cmake语法了~可以参考下面的CMakeLists.txt,把库链接进来

cmake_minimum_required(VERSION 3.10)
project(Rasterizer)

find_package(OpenCV REQUIRED)

set(CMAKE_CXX_STANDARD 17)

include_directories("C:/Program Files (x86)/Eigen3/include/eigen3")
include_directories( ${OpenCV_INCLUDE_DIRS} )
#指定要引用的dll的头文件所在路径
include_directories("D:/opencv/opencv/build/include")
#指定该dll的lib所在路径
link_directories("D:/opencv/opencv/build/x64/vc15/lib")

# 将源代码添加到此项目的可执行文件
add_executable(Rasterizer main.cpp rasterizer.hpp rasterizer.cpp Triangle.hpp Triangle.cpp)
target_link_libraries(Rasterizer ${OpenCV_LIBRARIES})

#指定链接库的名字,即该dll
# opencv_world450d.lib在..\opencv\build\x64\vc15\lib目录下,名字可能会稍有差别
target_link_libraries(Rasterizer opencv_world450d)

GAMES101 作业0

题目:给定一个点 P=(2,1), 将该点绕原点先逆时针旋转 45◦,再平移 (1,2), 计算出 变换后点的坐标(要求用齐次坐标进行计算)

关于齐次坐标,我的理解是将二维坐标三维化,可以将原本是矩阵加法的平移转化为矩阵乘法,方便进行旋转平移缩放等一系列运算。

代码:(注意浮点数的表示)

#include<cmath>
#include<Eigen/Core>
#include<Eigen/Dense>
#include<iostream>

using namespace std;
using namespace Eigen;

#define PI acos(-1)

int main(){
    Vector3d P(2.0f, 1.0f, 1.0f);
    Matrix3d rot, tra;
    double ang = 45.0/180.0 * PI;
    rot << 
        cos(ang), -sin(ang), 0,
        sin(ang), cos(ang), 0,
        0, 0, 1;
    tra <<
        1, 0, 1,
        0, 1, 2,
        0, 0, 1;
    cout << tra * rot * P << endl;

    return 0;
}

加油!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM