最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV仿射變換的示例代碼

 更新時間:2022年08月05日 08:54:24   作者:我菜就愛學(xué)  
本文主要介紹了OpenCV仿射變換的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、認(rèn)識仿射變換

仿射變換(Affine Map)又稱仿射映射,是指在幾何中,一個向量空間進行一次線性變換并接上一個平移,變換為另一個向量空間的過程。保持二維圖形之間的相對位置保持不變,平行線依然是平行線,且直線上的點的位置順序不變。

一個任意的仿射變換都可以表示為乘以一個矩陣接著再加上一個向量的形式。三種常見的變換形式:

  • 旋轉(zhuǎn):ratation(線性變換)
  • 平移:translation(向量加)
  • 縮放:scale(線性變換)

通常使用2 x 3的矩陣來表示仿射變換:

2、仿射變換的求法

說明:仿射變換表示的就是兩幅圖片之間的一種聯(lián)系,關(guān)于這種聯(lián)系的信息大致可以分為以下兩種場景:

  • 已知X和T,而且已知它們是有聯(lián)系的,接下來的跟著就是求出矩陣M。
  • 已知M和X,想要求得T。只要應(yīng)用算式T=M*X即可。

如上,點1、2、3(在Image 1中形成一個三角形)與Image 2中的三個點是一一映射的關(guān)系,且它們?nèi)匀恍纬扇切?,但形狀已?jīng)和之前的不一樣的,可以通過這樣的兩組三點求出仿射變換,然后把這種變換應(yīng)用到圖像中去。

3、進行仿射變換:warpAffine()函數(shù)

warpAffine()函數(shù)的作用依據(jù)下面的公式對圖像做仿射變換:

void warpAffine(InputArray src,OutputArray dst,InputArray M,Size dsize,int flags=INTER_LINEAR,intborderMOde=BODER_CONSTANT,const Scalar& borderValue=Scalar())
  • 第一個參數(shù):輸入圖像
  • 第二個參數(shù):輸出圖像,函數(shù)調(diào)用后的運算結(jié)果存在這里,需要和源圖片有一樣的尺寸和類型
  • 第三個參數(shù):2 x 3的變換矩陣,求得的仿射變換
  • 第四個參數(shù):表示輸出圖像的尺寸
  • 第五個參數(shù):插值方法的標(biāo)識符。默認(rèn)值是線性插值法(INTER_LINEAR)

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oCWwUOWK-1659625193572)(F:\學(xué)習(xí)記錄\opencv\截圖\image-20220804143908462.jpg)]

  • 第六個參數(shù):邊界像素模式
  • 第七個參數(shù):在恒定的邊界情況下取值,默認(rèn)值Scalar(),即0

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

說明:getRotationMatrix2D()函數(shù)用于計算二維旋轉(zhuǎn)變換矩陣。變換會將旋轉(zhuǎn)中心映射到它自身

Mat getRotationMatrix2D(Point2f center,double angle,double scale)
  • 第一個參數(shù):表示源圖像的旋轉(zhuǎn)中心
  • 第二個參數(shù):旋轉(zhuǎn)角度。角度為正值表示向逆時針旋轉(zhuǎn)(坐標(biāo)原點是左上角)
  • 第三個參數(shù):縮放系統(tǒng)

5、示例程序:

#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace std;
using namespace cv;
#define WINDOW_NAME1 "【原始圖窗口】"
#define WINDOW_NAME2 "【經(jīng)過Warp后的窗口】"
#define WINDOW_NAME3 "【經(jīng)過Warp和Rotate后的窗口】"
int main()
{
	system("color 2F");
	//參數(shù)準(zhǔn)備
	Point2f srcTriangle[3];
	Point2f dstTriangle[3];

	Mat rotMat(2, 3, CV_32FC1);
	Mat warpMat(2, 3, CV_32FC1);
	Mat srcImage, dstImage_warp, dstImage_warp_rotate;
	//加載源圖像
	srcImage = imread("E:\\Pec\\lan.jpg",1);
	//設(shè)置目標(biāo)圖像的大小和類型與源圖像一致
	dstImage_warp = Mat::zeros(srcImage.rows, srcImage.cols, srcImage.type());
	//設(shè)置源圖像和目標(biāo)圖像上的三組點以計算仿射變換
	//srcTriangle[0] = Point2f(0, 0); //Point2f表示Point類的兩個數(shù)據(jù)x,y為float類型;vector 表示存放四維int
	//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));
	//獲取變換矩陣,指定三個點
	srcTriangle[0] = Point2f(50, 50); 
	srcTriangle[1] = Point2f(200, 50);
	srcTriangle[2] = Point2f(50, 200);
	dstTriangle[0] = Point2f(100, 100);
	dstTriangle[1] = Point2f(200, 50);
	dstTriangle[2] = Point2f(100, 250);
	//求仿射變換,得到一個2x3的矩陣
	warpMat = getAffineTransform(srcTriangle, dstTriangle);
	//對源圖像應(yīng)用剛剛的求得的仿射變換
	warpAffine(srcImage, dstImage_warp, warpMat, dstImage_warp.size());

	//對圖像進行縮放后再旋轉(zhuǎn)
	//計算圖像中點順時針旋轉(zhuǎn)50°縮放因子為0.6的旋轉(zhuǎn)矩陣
	Point center = Point(dstImage_warp.cols / 2, dstImage_warp.rows / 2);
	double angle = -30.0;
	double scale = 0.8;
	//通過上面的旋轉(zhuǎn)細(xì)節(jié)信息求出旋轉(zhuǎn)矩陣
	rotMat = getRotationMatrix2D(center, angle, scale);
	//旋轉(zhuǎn)已經(jīng)縮放后的圖像
	warpAffine(dstImage_warp, dstImage_warp_rotate, rotMat, dstImage_warp.size());
	imshow(WINDOW_NAME1, srcImage);
	imshow(WINDOW_NAME2, dstImage_warp);
	imshow(WINDOW_NAME3, dstImage_warp_rotate);
	waitKey(0);
	return 0;

}

到此這篇關(guān)于OpenCV仿射變換的示例代碼的文章就介紹到這了,更多相關(guān)OpenCV 仿射變換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • python運用pygame庫實現(xiàn)雙人彈球小游戲

    python運用pygame庫實現(xiàn)雙人彈球小游戲

    這篇文章主要為大家詳細(xì)介紹了python運用pygame庫實現(xiàn)雙人彈球小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • python安裝與使用redis的方法

    python安裝與使用redis的方法

    這篇文章主要介紹了python安裝與使用redis的方法,分析了安裝與配置的具體步驟,并結(jié)合實例詳細(xì)分析了redis數(shù)據(jù)庫的具體使用技巧,需要的朋友可以參考下
    2016-04-04
  • Anaconda+Pycharm+Pytorch虛擬環(huán)境創(chuàng)建(各種包安裝保姆級教學(xué))

    Anaconda+Pycharm+Pytorch虛擬環(huán)境創(chuàng)建(各種包安裝保姆級教學(xué))

    相信很多時候大家都會用到虛擬環(huán)境,他具有可以讓你快速切換不同的python版本,本文主要介紹了Anaconda+Pycharm+Pytorch虛擬環(huán)境創(chuàng)建,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 詳解利用Pandas求解兩個DataFrame的差集,交集,并集

    詳解利用Pandas求解兩個DataFrame的差集,交集,并集

    這篇文章主要和大家講解一下如何利用Pandas函數(shù)求解兩個DataFrame的差集、交集、并集,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-07-07
  • Python?虛擬環(huán)境的價值和常用命令詳解

    Python?虛擬環(huán)境的價值和常用命令詳解

    在實際項目開發(fā)中,我們通常會根據(jù)自己的需求去下載各種相應(yīng)的框架庫,如Scrapy、Beautiful?Soup等,但是可能每個項目使用的框架庫并不一樣,或使用框架的版本不一樣,今天給大家分享下Python?虛擬環(huán)境的價值和常用命令,感興趣的朋友一起看看吧
    2022-05-05
  • Python如何使用隊列方式實現(xiàn)多線程爬蟲

    Python如何使用隊列方式實現(xiàn)多線程爬蟲

    這篇文章主要介紹了Python如何使用隊列方式實現(xiàn)多線程爬蟲,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • python程序 創(chuàng)建多線程過程詳解

    python程序 創(chuàng)建多線程過程詳解

    這篇文章主要介紹了python程序 創(chuàng)建多線程過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python 檢查是否為中文字符串的方法

    python 檢查是否為中文字符串的方法

    今天小編就為大家分享一篇python 檢查是否為中文字符串的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python中map和列表推導(dǎo)效率比較實例分析

    Python中map和列表推導(dǎo)效率比較實例分析

    這篇文章主要介紹了Python中map和列表推導(dǎo)效率比較,實例分析了Python中的map與列表的推導(dǎo)效率,需要的朋友可以參考下
    2015-06-06
  • 動態(tài)創(chuàng)建類實例代碼

    動態(tài)創(chuàng)建類實例代碼

    Python中要創(chuàng)建一個類的實例,要首先導(dǎo)入該類或者該類所屬的模塊。
    2009-10-10

最新評論

天等县| 綦江县| 通渭县| 丘北县| 东城区| 丹寨县| 乌拉特前旗| 湾仔区| 洪雅县| 丹凤县| 永善县| 通榆县| 洪湖市| 龙门县| 夹江县| 香河县| 凤城市| 磐石市| 普宁市| 县级市| 洱源县| 天长市| 永定县| 长春市| 岚皋县| 呈贡县| 镇原县| 曲松县| 连云港市| 灯塔市| 五指山市| 永丰县| 房产| 个旧市| 尚志市| 青冈县| 奎屯市| 钟祥市| 洪泽县| 白玉县| 和田县|