基本思想:深入学习一下仿射矩阵的使用和分解 环境 window10+Mingw32+Opencv4.4.0+Eigen
这里仅说明一下Eigen库的导入方法,
首先去Eigen官网下载Eigen源码,解压导入Clion工程中,修改CMakeLists.txt, 配置Opencv4.4.0
试一下Reflect about origin的方法
CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(untitled6)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 ")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 ")
set(CMAKE_CXX_STANDARD 11)
set(OpenCV_DIR "D:\\Opencv440\\buildMinGW")#改为mingw-bulid的位置
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
find_package(OpenCV REQUIRED)
include_directories(${CMAKE_SOURCE_DIR}/eigen-3.3.8)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(untitled6 main.cpp )
target_link_libraries(untitled6 ${OpenCV_LIBS} )
set(OpenCV_LIBS opencv_core opencv_imgproc opencv_highgui opencv_imgcodecs)
code
#include <iostream>
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace cv;
using namespace Eigen;
using namespace std;
int main()
{
Mat image = imread("F:\\1.jpg");
Mat warp_mat(2, 3, CV_32FC1);
Mat invwarp_mat(2, 3, CV_32FC1);
Eigen::Matrix<double, 3, 3,RowMajor> matrix_33,invmatrix_33;
matrix_33<<1, 0, 0,
0, -3, 300,
0,0,1;
Eigen::Matrix<double, 2, 3,RowMajor> matrix_23,invmatrix_23;
matrix_23=matrix_33.block<2,3>(0,0);
eigen2cv(matrix_23 ,warp_mat);
cout<<warp_mat<<endl;
Mat destMat;
warpAffine(image, destMat, warp_mat, image.size());
//完成,显示和保存图像
imshow("dest", destMat);
invmatrix_33=matrix_33.inverse();
invmatrix_23=invmatrix_33.block<2,3>(0,0);
eigen2cv(invmatrix_23 ,invwarp_mat);
cout<<invwarp_mat<<endl;
warpAffine(image, destMat, invwarp_mat, image.size());
imshow("invdest", destMat);
waitKey(0);
return 0;
}
工程的文件的结构
ubuntu@DESKTOP-L50FRR6:/mnt/f/untitled3$ tree -L 1
.
├── CMakeLists.txt
├── cmake-build-debug
├── eigen-3.3.8
└── main.cpp
2 directories, 2 files
结果图
越来越喜欢eigen 基本的仿射原理 请查看其它博客;这里只是记录一下~
标签:仿射,CMAKE,matrix,23,19,Opencv4.4,33,include,Eigen From: https://blog.51cto.com/u_12504263/5718733