【Opencv探索】基于OpenCV的“图像拼接特效”(这效果很实用啊)
前言
家好!我是梨子同學(xué)!
希望大家多多支持我!哈哈
為了感謝每一個(gè)關(guān)注我的小可愛:💓每篇文章的項(xiàng)目源碼都是無償分享滴💓👇👇👇👇
點(diǎn)這里藍(lán)色這行字體自取,需要什么源碼記得說標(biāo)題名字哈!私信我也可!
小編也一直在學(xué)習(xí)編程,如代碼小程序出現(xiàn)錯(cuò)誤歡迎大家評論區(qū)留言哈!
最后——如果文章有幫助到你,記得“關(guān)注”、“點(diǎn)贊”、“評論”三連哦~
?
正文
OpenCV中有一個(gè)功能: 圖像拼接,該模塊通過簡單的高級API設(shè)置,可以獲得比較好的圖像拼接
效果,OpenCV官方提供了一個(gè)高度集成的API函數(shù)?Stitcher,只要2行代碼就可以得到一個(gè)很好
的拼接圖像。
Ptr<Stitcher>?stitcher?=?Stitcher::create(mode); Stitcher::Status?status?=?stitcher->stitch(imgs,?pano);其中第一行代碼是創(chuàng)建拼接Stitcher的指針,第二行代碼是調(diào)用拼接算法,
-
imgs表示的輸入?yún)?shù),是一系列Mat對象的vector。
-
pano表示的輸出結(jié)果,是拼接之后的Mat對象
今天小編就教教大家,讓大家實(shí)例演示看下這個(gè)拼接效果!
?
stitching拼接算法?流程圖示如下:
?
可見圖像拼接是一個(gè)很復(fù)雜的算法,是由一系列的基礎(chǔ)算法構(gòu)成,這些基礎(chǔ)算法如果你不是很了
解,其實(shí)很難實(shí)現(xiàn)自己的圖像拼接,這其中影響拼接算法stitch工作最常見幾個(gè)算法子模塊為:
-
特征發(fā)現(xiàn)與描述子
常見的特征可以選擇SIFT、SURF、AKAZE、ORB等特征算子進(jìn)行匹配 -
相機(jī)參數(shù)
不同的相機(jī)參數(shù)與設(shè)置會導(dǎo)致不同的結(jié)果 -
融合方式(blender)
不同的融合方式,也會導(dǎo)致不同結(jié)果 -
各種閾值設(shè)置,特別是config threshold,如果無法特征匹配,記得把這個(gè)閾值調(diào)小點(diǎn)
其它參數(shù)可以如何設(shè)置可以參考OpenCV的官方文檔,總之無法拼接就去調(diào)參數(shù),一般最后都會拼
接成功,此外該算法速度比較慢,但是支持GPU執(zhí)行,所以想要實(shí)時(shí)的可以嘗試如何GPU下執(zhí)
行,我這里沒有嘗試 ,誰嘗試過的可以留言分享,我負(fù)責(zé)置頂。
一、效果展示
1)魚眼相機(jī)
2)環(huán)視(平面曲翹)
?3)默認(rèn)效果
二、代碼展示
#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]));}// 設(shè)置拼接模式與參數(shù)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; }注意:一起運(yùn)行速度比較慢!是真的比較慢!
總結(jié)
關(guān)注小編獲取更多精彩內(nèi)容!
?制作不易,記得一鍵三連哦!!?如需打包好的源碼+素材免費(fèi)分享滴!!傳送門
總結(jié)
以上是生活随笔為你收集整理的【Opencv探索】基于OpenCV的“图像拼接特效”(这效果很实用啊)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当“天天酷跑”遇上“Python程序员”
- 下一篇: Opencv轻松入门:OpenCV入门难