OpenCV實現圖像拼接案例
一、penCV圖像特征采集
特征提取:
一幅圖中總存在著一些獨特的像素點,這些點我們可以認為就是這幅圖的特征,成為特征點。
計算機視覺領域特征提取:
獲取一幅圖中存在著一些獨特的像素點。
需要解決問題:
- 1、提取圖片中的特征點
- 2、解決尺度不變性問題,不同大小的圖片獲取到的特征是一樣的。
- 3、提取到的特征點要穩定,能被精確定位。
二、OpenCV 特征提取算法
特征提取算法:
三、OpenCV特征提取
結果:提取到的特征很粗糙,不是很精確的特征點,導致效果很差。
要求:去粗取精,獲取優秀的匹配點。
四、OpenCV特征取精
取一幅圖像中的一個SIFT關鍵點,並找出其與另一幅圖像中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離除以次近的距離得到的比率ratio少於某個閾值T,則接受這一對匹配點。
五、OpenCV透視轉換
透視變換是按照物體成像投影規律進行變換,即將物體重新投影到新的成像平面。透視變換常用於機器人視覺導航研究中,由於相機視場與地面存在傾斜角使得物體成像產生畸變,通常通過透視變換實現對物體圖像的校正。
使用cv::warpPerspective()進行透視變換
void cv::warpPerspective(
cv::InputArray src, // 輸入圖像
cv::OutputArray dst, // 輸出圖像
cv::InputArray M, // 3×3 變換矩陣
cv::Size dsize, // 目標圖像大小
int flags = cv::INTER_LINEAR, // 插值方法
int borderMode = cv::BORDER_CONSTANT, // 外推方法
const cv::Scalar& borderValue = cv::Scalar() //常量邊界時使用
);
透視矩陣 :
獲取特征矩陣:
a. 根據圖像的4個頂點來獲取特征矩陣
cv::Mat cv::getPerspectiveTransform( // 返回3×3透視變換矩陣
const cv::Point2f* src, // 源圖像四個頂點坐標(點數組)
const cv::Point2f* dst // 目標圖像上四個頂點的坐標(點數組)
);
b. 函數來計算透視矩陣H(3*3)
findHomography (
InputArray srcPoints,//源平面中點的坐標矩陣.vector<Point2f>類型
InputArray dstPoints,//目標平面中點的坐標矩陣,vector<Point2f>類型
int method = 0,
double ransacReprojThreshold = 3,
OutputArray mask = noArray(),
const int maxIters = 2000,
const double confidence = 0.995
)
六、OpenCV圖像配準融合與圖像反投影優化
圖片拼接流程思想:
到此這篇關於OpenCV實現圖像拼接案例的文章就介紹到這瞭,更多相關OpenCV 圖像拼接內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!