OpenCv3程式設計學習十一

2021-10-07 21:28:29 字數 2752 閱讀 7282

1.仿射變換

又稱仿射對映,意思就是在幾何空間中,乙個向量空間進行一次線性變換並接上乙個平移,變換為另乙個向量空間的過程。它保持了二維影象的「平直性」和「平行性」

仿射變換可以當做是乘以乙個矩陣,也就是線性變換,再加上乙個向量(平移)的形式。通常有三種變換方式:

1.旋轉

2.平移

3.縮放

warpaffine()函式:輸入輸出影象,2x3的變換矩陣,輸出影象的尺寸和一些插值方法,比如線性插值,最近鄰插值等還有兩個帶有預設數值的引數。

getrotationmatrix2d()函式:計算二維旋轉變換矩陣,引數分別有旋轉中心,旋轉角度和縮放係數。

#include

#include

#include

#include

using namespace cv;

using namespace std;

//定義一些輔助巨集

#define window_name1 "[原始圖視窗]"

#define window_name2 "[經過warp後的影象]"

#define window_name3 "[經過warp和rotate後的影象]"

static

void

showhelptext()

;int

main()

//設定目標影象的大小和型別與原影象一致

dstimage_warp = mat:

:zeros

(srcimage.rows, srcimage.cols, srcimage.

type()

);//設定原影象和目標影象上的三組點以計算仿射變換

src********[0]

=point2f(0

,0);

src********[1]

=point2f

(static_cast<

float

>

(srcimage.cols -1)

,0);

src********[2]

=point2f(0

, static_cast<

float

>

(srcimage.rows -1)

);dst********[0]

=point2f

(static_cast<

float

>

(srcimage.cols*

0.0)

, static_cast<

float

>

(srcimage.rows*

0.33))

; dst********[1]

=point2f

(static_cast<

float

>

(srcimage.cols*

0.65

), static_cast<

float

>

(srcimage.rows*

0.35))

; dst********[2]

=point2f

(static_cast<

float

>

(srcimage.cols*

0.15

), static_cast<

float

>

(srcimage.rows*

0.6));

//再求仿射變換

warpmat =

getaffinetransform

(src********, dst********)

;//再對原影象應用剛剛的仿射變換

warpaffine

(srcimage, dstimage_warp, warpmat, dstimage_warp.

size()

);//再對影象進行縮放和旋轉,也就是繞影象中點順時針旋轉50度縮放因子為0.6的旋轉舉證

point center =

point

(dstimage_warp.cols /

2, dstimage_warp.rows /2)

;double angle =

-30.0

;double scale =

0.8;

//按照上面的引數進行旋轉

rotmat =

getrotationmatrix2d

(center, angle, scale)

;//再對縮放過的影象進行旋轉

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

);return0;

}//再寫一下showhelptext函式

static

void

showhelptext()

2.直方圖均衡化

OpenCv3程式設計學習一

之前學習的時候有裝過opencv,版本是3.4.而對應的visual studio是2017版本。所以直接開始建立了控制台專案,命名為2020.620.放在了d盤的vs opencvdemo 配置是vc15 大部分參考自 需要注意的是 首先關於的路徑名,可以是相對路徑,也就是存放在當前目錄下 也就是...

OpenCv3程式設計學習六

dft 函式,就是對一維或者二維陣列進行正向或反向離散傅利葉變化,第乙個和第二個引數分別是輸入和輸出,第三個引數是轉換型別,第四個引數是選擇影象的行數。getoptimaldftsize 函式是返回dft的最優尺寸大小,只有乙個代表向量尺寸的引數。copymakerborder 函式的作用是擴充影象...

OpenCv3程式設計學習十二

直方圖均衡化 這就是通過拉伸畫素強度分布範圍來增強影象對比度的一種方法。但是均衡化處理後的影象只能是近似均勻分布,均衡化影象的動態範圍擴大了。本質就是擴大量化間隔同時減少了量化級別,所以一些灰度不同的畫素可能會變的相同,最重要的是,均衡化後的如果再對其均衡化,則不會有任何變化 equalizehis...