opencv 仿射變換的實現

2021-06-21 14:16:59 字數 1392 閱讀 5112

先放**

這版的**有點錯誤,裡面的指標分配了記憶體以後沒有釋放,有可能會造成記憶體洩漏

問題原因已經找到了,現在有點累,休息一下。。。

大概說一下吧,主要是因為越界的問題

比如說反變換到輸入影象的時候,正確範圍應該是(0,in.rows-1)而不是(0,in.rows)

果然,這一版的函式還是有bug,影象的平移引數只能是正整數。。。正在修改中。。。

而且函式介面太次,只能實現cv_8uc1型別的影象的仿射變換

準備改進一下,同時實現cv_32fc1型別的影象的變換

// affine.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include #include #include #include #include using namespace cv;

using namespace std;

void imgaffine(cv::mat in,cv::mat out,cv::mat matrix);

// 123.cpp : 定義控制台應用程式的入口點。

//int _tmain(int argc, _tchar* argv)

void imgaffine(cv::mat in,cv::mat out,cv::mat matrix)

else

data_out[i]=zhizhen[xx];

}} }

}

最近在往zedboard上面移植opencv的演算法,一切都挺順利的

只是有乙個意料之外的問題

在arm上面做仿射變換時,得到的是乙個錯誤的影象

剛開始懷疑是opencv庫版本比較低的問題

可是換了高版本的庫以後還是沒用

這期間有乙個比較蠢的錯誤

首先反思一下

就是設定opencv庫的路徑的時候,因為比較懶,沒有複製檔案路徑,而是直接把2.3.1替換為2.4.8,結果沒有注意資料夾名字的大小寫問題

浪費了一天時間

昨天做linaro的圖形介面

也是因為比較懶

沒有重新製作檔案系統

浪費了一天時間

到了今天

自己編寫仿射變換的函式時

想偷懶,一直在師兄之前寫的乙個程式的基礎上面改

改了一天沒弄好

50+的**

寫了一天

結果剛才痛下決心自己重頭寫

一次通過!

事實證明,往往自己覺得最麻煩的方案才是最正確的方案

OpenCV實現仿射變換

乙個任意的仿射變換都能表示為 乘以乙個矩陣 線性變換 接著再 加上乙個向量 平移 綜上所述,我們能夠用仿射變換來表示 旋轉 線性變換 平移 向量加 縮放操作 線性變換 你現在可以知道,事實上,仿射變換代表的是兩幅圖之間的關係.全域性變數 char source window source image...

OpenCV 仿射變換

一 仿射變換 仿射變換是一種二維座標之間的變換,變換前後保持圖形的平直性和平行性。仿射變換可以理解為是向量經過一次線性變換和一次平移變換。void warpaffine inputarray src,outputarray dst,inputarray m,size dsize,int flags ...

opencv 仿射變換

仿射變換的兩種方式 1 利用變換前後的三個座標點達到變換目的。2 使用旋轉角度和縮放倍數來變換。在實際的使用中,採用1的方式比較方便,但是有乙個問題 變換之後的矩陣大小該如何正確設定,如果設定大小不合適,會導致圖的實際區域超出邊界。所以在此記錄一下解決辦法。思路 由於已知了變換前後的三個座標點,可以...