OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D()
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D()
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                OpenCV學習筆記(十五):圖像仿射變換:warpAffine(),getRotationMatrix2D()
一個任意的仿射變換都能表示為乘以一個矩陣(線性變換)接著再加上一個向量(平移)的形式。
 仿射變換(Affine Transformation或 Affine Map),是指在幾何中**一個向量空間進行一次線性變換并接上一個平移,變換為另一個向量空間的過程。**它保持了二維圖形的==“平直性”(即:直線經過變換之后依然是直線)和“平行性”==(即:二維圖形之間的相對位置關系保持不變,平行線依然是平行線,且直線上點的位置順序不變)。
 那么, 我們能夠用仿射變換來表示如下三種常見的變換形式:
1)旋轉,rotation (線性變換)
 2)平移,translation(向量加)
 3)縮放,scale(線性變換)
 
1、warpAffine()函數
void warpAffine( InputArray src, // 源圖像 OutputArray dst, // 函數調用后的運算結果 InputArray M, // 2×3的變換矩陣 Size dsize, // 表示輸出圖像的尺寸 int flags=INTER_LINEAR, // 插值方法的標識符 intborderMode=BORDER_CONSTANT, // 邊界像素模式 const Scalar& borderValue=Scalar() // 在恒定的邊界情況下取的值 )2、getAffineTransform()函數
計算3個二維點對之間的仿射變換矩陣H(2行x3列),自由度為6.
Mat cv::getAffineTransform( const Point2f src[], // 源圖像中三角形頂點的坐標(3點) const Point2f dst[] // 目標圖像中三角形頂點的坐標(3點) )
 其中
 
2、getRotationMatrix2D()函數
Mat getRotationMatrix2D( Point2f center, // 表示源圖像的旋轉中心 double angle, // 旋轉角度。角度為正值表示向逆時針旋轉(坐標原點是左上角) double scale, // 縮放系數 )此函數計算以下矩陣
 
1、示例一:
#include <opencv2/opencv.hpp>using namespace cv; using namespace std;#define WINDOW_NAME "重映射" //為窗口標題定義的宏Mat g_srcImage, g_dstImage; Mat g_map_x, g_map_y;int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);Mat src = imread("F:/C++/2. OPENCV 3.1.0/TEST/7.jpg");Mat dst_warp, dst_warpRotateScale;Point2f srcPoints[3];//原圖中的三點Point2f dstPoints[3];//目標圖中的三點//第一種仿射變換的調用方式:三點法//三個點對的值,只要知道變換后圖的三個點坐標,就可實現仿射變換srcPoints[0] = Point2f(0, 0);srcPoints[1] = Point2f(0, src.rows - 1);srcPoints[2] = Point2f(src.cols - 1, 0);//映射后的三個坐標值dstPoints[0] = Point2f(0, src.rows*0.3);dstPoints[1] = Point2f(src.cols*0.25, src.rows*0.75);dstPoints[2] = Point2f(src.cols*0.75, src.rows*0.25);Mat M1 = getAffineTransform(srcPoints, dstPoints);//計算變換矩陣cout<<"M1= "<<M1<<endl;warpAffine(src, dst_warp, M1, src.size());//仿射變換//第二種仿射變換的調用方式:直接指定角度和比例//旋轉加縮放Point2f center(src.cols/2, src.rows/2);//旋轉中心//Point2f center(0, 0);//旋轉中心double angle = 45;//逆時針旋轉45度double scale = 0.5;//縮放比例Mat M2 = getRotationMatrix2D(center, angle, scale);//計算旋轉加縮放的變換矩陣cout<<"M2= "<<M2<<endl;warpAffine(src, dst_warpRotateScale, M2, src.size());//仿射變換imshow("原始圖", src);imshow("仿射變換1", dst_warp);imshow("仿射變換2", dst_warpRotateScale);waitKey(0);return a.exec(); }
 
 2、示例二,旋轉動畫:
總結
以上是生活随笔為你收集整理的OpenCV学习笔记(十五):图像仿射变换:warpAffine(),getRotationMatrix2D()的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Hadoop分布式集群搭建详细过程
 - 下一篇: Pytorch 为什么每一轮batch需