日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

《OpenCV3编程入门》学习笔记7 图像变换(四 )仿射变换

發(fā)布時(shí)間:2023/11/27 生活经验 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《OpenCV3编程入门》学习笔记7 图像变换(四 )仿射变换 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

7.4 仿射變換(Affine Transformation)

7.4.1 概念

1.仿射變換,放射映射,在幾何中,一個(gè)向量空間按進(jìn)行一次線性變換(乘以一個(gè)矩陣)并接上一個(gè)平移(加上一個(gè)向量),變換為另一個(gè)向量空間的過(guò)程,保持了二維圖形的平直性和平行性。
2.變換形式:(1)旋轉(zhuǎn),rotation(2)平移,translation(3)縮放,scale
3.矩陣表示:
??????????
??使用矩陣A和矩陣B對(duì)二維向量X=[x;y]做變換:
????????????????????
??或
????????????????????
??即:
????????????????????
4.涉及函數(shù):warpAffine()和getRotationMatrix2D()函數(shù)

7.4.2 仿射變換函數(shù):warpAffine()函數(shù)

1.函數(shù)原型:

void warpAffine(InputArray src,OutputArray dst,InputArray M,Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())

2.參數(shù)說(shuō)明:
(1)輸入圖像
(2)輸出圖像
(3)2*3的變換矩陣M
(4)輸出圖像尺寸
(5)插值方式標(biāo)識(shí)符,默認(rèn)INTER_LINEAR,可選插值方式:
??????????
(6)邊界像素模式,默認(rèn)BORDER_CONSTANT
(7)在恒定邊界情況下取的值,默認(rèn)Scalar(),即0

7.4.3 計(jì)算二維旋轉(zhuǎn)變換矩陣:getRotationMatrix2D()函數(shù)

1.函數(shù)原型:

void getRotationMatrix2D(Point2f center, double angle, double scale)

2.參數(shù)說(shuō)明:
(1)源圖像旋轉(zhuǎn)中心
(2)旋轉(zhuǎn)角度
(3)縮放系數(shù)
3.函數(shù)操作:
??函數(shù)計(jì)算以下矩陣:
??????????????????
??其中,????????????

7.4.4 仿射變換示例

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
#define WINDOW_NAME1 "【原始圖】"
#define WINDOW_NAME2 "【W(wǎng)arp后的圖像】"
#define WINDOW_NAME3 "【W(wǎng)arp和Rotate后的圖像】"int main()
{//參數(shù)準(zhǔn)備//定義兩組點(diǎn),代表兩個(gè)三角形Point2f srcTriangle[3];Point2f dstTriangle[3];//定義一些Mat變量Mat rotMat(2, 3, CV_32FC1);Mat warpMat(2, 3, CV_32FC1);Mat srcImage, dstImage_warp, dstImage_warp_rotate;//加載原圖并初始化srcImage = imread("love.jpg");if (!srcImage.data){printf("載入原圖失敗~!\n");return false;}//設(shè)置目標(biāo)圖像大小和類型dstImage_warp = Mat::zeros(srcImage.rows, srcImage.cols, srcImage.type());//設(shè)置源圖像與目標(biāo)圖像上的三組點(diǎn)以計(jì)算仿射變換srcTriangle[0] = Point2f(0, 0);srcTriangle[1] = Point2f(static_cast<float>(srcImage.cols - 1), 0);srcTriangle[2] = Point2f(0, static_cast<float>(srcImage.rows - 1));dstTriangle[0] = Point2f(static_cast<float>(srcImage.cols*0.0), static_cast<float>(srcImage.rows*0.33));dstTriangle[1] = Point2f(static_cast<float>(srcImage.cols*0.65), static_cast<float>(srcImage.rows*0.35));dstTriangle[2] = Point2f(static_cast<float>(srcImage.cols*0.15), static_cast<float>(srcImage.rows*0.6));//仿射變換warpMat = getAffineTransform(srcTriangle, dstTriangle);//對(duì)原圖像應(yīng)用剛求得的仿射變換warpAffine(srcImage, dstImage_warp, warpMat, dstImage_warp.size());//對(duì)圖像進(jìn)行縮放變換后再旋轉(zhuǎn)//計(jì)算圖像中點(diǎn)順時(shí)針旋轉(zhuǎn)50度縮放因子為0.6的矩陣Point center = Point(dstImage_warp.cols / 2, dstImage_warp.rows / 2);double angle = -50.0;double scale = 0.6;//通過(guò)上面的旋轉(zhuǎn)細(xì)節(jié)信息求得旋轉(zhuǎn)矩陣rotMat = getRotationMatrix2D(center, angle, scale);//旋轉(zhuǎn)已縮放的圖像warpAffine(dstImage_warp, dstImage_warp_rotate, rotMat, dstImage_warp.size());//顯示結(jié)果imshow(WINDOW_NAME1, srcImage);imshow(WINDOW_NAME2, dstImage_warp);imshow(WINDOW_NAME3, dstImage_warp_rotate);waitKey(0);return 0;
}

運(yùn)行效果:

總結(jié)

以上是生活随笔為你收集整理的《OpenCV3编程入门》学习笔记7 图像变换(四 )仿射变换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。