【Opencv探索】基于OpenCV的“图像拼接特效”(这效果很实用啊)
前言
家好!我是梨子同學!
希望大家多多支持我!哈哈
為了感謝每一個關注我的小可愛:💓每篇文章的項目源碼都是無償分享滴💓👇👇👇👇
點這里藍色這行字體自取,需要什么源碼記得說標題名字哈!私信我也可!
小編也一直在學習編程,如代碼小程序出現錯誤歡迎大家評論區留言哈!
最后——如果文章有幫助到你,記得“關注”、“點贊”、“評論”三連哦~
?
正文
OpenCV中有一個功能: 圖像拼接,該模塊通過簡單的高級API設置,可以獲得比較好的圖像拼接
效果,OpenCV官方提供了一個高度集成的API函數?Stitcher,只要2行代碼就可以得到一個很好
的拼接圖像。
Ptr<Stitcher>?stitcher?=?Stitcher::create(mode); Stitcher::Status?status?=?stitcher->stitch(imgs,?pano);其中第一行代碼是創建拼接Stitcher的指針,第二行代碼是調用拼接算法,
-
imgs表示的輸入參數,是一系列Mat對象的vector。
-
pano表示的輸出結果,是拼接之后的Mat對象
今天小編就教教大家,讓大家實例演示看下這個拼接效果!
?
stitching拼接算法?流程圖示如下:
?
可見圖像拼接是一個很復雜的算法,是由一系列的基礎算法構成,這些基礎算法如果你不是很了
解,其實很難實現自己的圖像拼接,這其中影響拼接算法stitch工作最常見幾個算法子模塊為:
-
特征發現與描述子
常見的特征可以選擇SIFT、SURF、AKAZE、ORB等特征算子進行匹配 -
相機參數
不同的相機參數與設置會導致不同的結果 -
融合方式(blender)
不同的融合方式,也會導致不同結果 -
各種閾值設置,特別是config threshold,如果無法特征匹配,記得把這個閾值調小點
其它參數可以如何設置可以參考OpenCV的官方文檔,總之無法拼接就去調參數,一般最后都會拼
接成功,此外該算法速度比較慢,但是支持GPU執行,所以想要實時的可以嘗試如何GPU下執
行,我這里沒有嘗試 ,誰嘗試過的可以留言分享,我負責置頂。
一、效果展示
1)魚眼相機
2)環視(平面曲翹)
?3)默認效果
二、代碼展示
#include <opencv2/opencv.hpp> #include <iostream>using namespace cv; using namespace std;int main(int argc, char** argv) {vector<string> files;glob("D:/images/zsxq/1", files);vector<Mat> images;for (int i = 0; i < files.size(); i++) {printf("image file : %s \n", files[i].c_str());images.push_back(imread(files[i]));}// 設置拼接模式與參數Mat result1, result2, result3;Stitcher::Mode mode = Stitcher::PANORAMA;Ptr<Stitcher> stitcher = Stitcher::create(mode);// 拼接方式-多通道融合auto blender = detail::Blender::createDefault(detail::Blender::MULTI_BAND);stitcher->setBlender(blender);// 拼接Stitcher::Status status = stitcher->stitch(images, result1);// 平面曲翹拼接auto plane_warper = makePtr<cv::PlaneWarper>();stitcher->setWarper(plane_warper);status = stitcher->stitch(images, result2);// 魚眼拼接auto fisheye_warper = makePtr<cv::FisheyeWarper>();stitcher->setWarper(fisheye_warper);status = stitcher->stitch(images, result3);// 檢查返回if (status != Stitcher::OK){cout << "Can't stitch images, error code = " << int(status) << endl;return EXIT_FAILURE;}imwrite("D:/result1.png", result1);imwrite("D:/result2.png", result2);imwrite("D:/result3.png", result3);waitKey(0);return 0; }注意:一起運行速度比較慢!是真的比較慢!
總結
關注小編獲取更多精彩內容!
?制作不易,記得一鍵三連哦!!?如需打包好的源碼+素材免費分享滴!!傳送門
總結
以上是生活随笔為你收集整理的【Opencv探索】基于OpenCV的“图像拼接特效”(这效果很实用啊)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当“天天酷跑”遇上“Python程序员”
- 下一篇: Opencv轻松入门:OpenCV入门难