iOS 下基于OpenCV 的全景圖像拼接

需求

公司做航拍飛行器的控制app椒楣,app還包括一些圖像方面的處理贡歧。這次的是 全景圖像拼接合成整胃,大概功能就是app上一個按鈕,點擊后發(fā)給飛控板拷获,航拍器接收到后會水平旋轉(zhuǎn)拍幾張圖片篮撑,然后將拍攝的照片合成。

思路

移動端也沒啥思路匆瓜,問了下做算法的師兄赢笨,說OpenCV直接有處理類未蝌。

stitching

網(wǎng)上查了下資料,就跟著弄了起來茧妒,結(jié)果還不錯萧吠。

效果


1
2
3
4
全景

用過好幾款航拍器,這款拍出來的效果是最好的桐筏,帶云臺的怎憋。不理解啥是帶云臺的也沒關(guān)系,就是合成的所有照片盡量同一水平合成效果就會很不錯九昧。細節(jié)上面好像是模糊了一些绊袋,并且在實際測試中合成圖片過多的話會出現(xiàn)掛掉的情況。

具體實現(xiàn)

這里我用的OpenCV的版本是3.3.0?

#import <opencv2/stitching.hpp>

#import?<opencv2/imgcodecs/ios.h>? 這個是Mat和image轉(zhuǎn)換的

```

-(void)stitchImage:(NSArray*)images{

? ? vector imgs;

? ? for(NSIntegeri =0; i < images.count; i++) {

? ? ? ? Matimage;

? ? ? ? UIImageToMat(images[i], image);

? ? ? ? cvtColor(image, image,CV_RGBA2RGB);

? ? ? ? imgs.push_back(image);

? ? }

? ? Matpano;

? ? Stitcherstitcher =Stitcher::createDefault(false);

? ? Stitcher::Statusstatus = stitcher.stitch(imgs, pano);//拼接

? ? if(status !=Stitcher::OK){//判斷拼接是否成功

? ? ? cout << "Can't stitch images, error code = " << int(status) << endl;

? ? }

? ? UIImage*targetImage =MatToUIImage(pano);

}

```

代碼就在上面了铸鹰,也很容易理解癌别。但是剛開始實際跑起來還是遇到了一些問題。

1.報錯"cvflann::anyimpl::bad_any_cast"蹋笼,google了也有很多人碰到了相同的情況展姐,但是解決辦法卻不相同。最后看了一篇文章在“opencv_modules.cpp”文件中的“#define HAVE_OPENCV_FLANN”改成“#undef HAVE_OPENCV_FLANN”


修改

2.報錯“image.type() == CV_CU83", 說應(yīng)該是圖片不是三通道的錯誤剖毯。添加了這一行”"cvtColor(image, image,CV_RGBA2RGB);"

總結(jié)

其實這只是簡單實現(xiàn)圾笨,還有很多需要完整。例如分析合成的效率和GPU,看看最大合成情況逊谋。這里的圖片輸入也可以直接傳入視頻流YUV轉(zhuǎn)Mat擂达。最后輸出的圖片也可以想想怎么能剪裁出最大可視范圍,而不是有黑邊棱角的胶滋。像下面這樣:

全景剪裁后

并且也要熟悉opencv板鬓,不求看懂算法,但里面的顏色轉(zhuǎn)換究恤,Mat矩陣定義都可以去了解俭令。下次用的時候也不會陌生。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末部宿,一起剝皮案震驚了整個濱河市抄腔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌理张,老刑警劉巖赫蛇,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異涯穷,居然都是意外死亡棍掐,警方通過查閱死者的電腦和手機藏雏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門拷况,熙熙樓的掌柜王于貴愁眉苦臉地迎上來作煌,“玉大人,你說我怎么就攤上這事赚瘦∷谑模” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵起意,是天一觀的道長鹰服。 經(jīng)常有香客問我,道長揽咕,這世上最難降的妖魔是什么悲酷? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮亲善,結(jié)果婚禮上设易,老公的妹妹穿的比我還像新娘。我一直安慰自己蛹头,他們只是感情好顿肺,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渣蜗,像睡著了一般屠尊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上耕拷,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天讼昆,我揣著相機與錄音,去河邊找鬼骚烧。 笑死控淡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的止潘。 我是一名探鬼主播掺炭,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凭戴!你這毒婦竟也來了涧狮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤么夫,失蹤者是張志新(化名)和其女友劉穎者冤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體档痪,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡涉枫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了腐螟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愿汰。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡困后,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出衬廷,到底是詐尸還是另有隱情摇予,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布吗跋,位于F島的核電站侧戴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏跌宛。R本人自食惡果不足惜酗宋,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疆拘。 院中可真熱鬧本缠,春花似錦、人聲如沸入问。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芬失。三九已至楣黍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棱烂,已是汗流浹背租漂。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颊糜,地道東北人哩治。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像衬鱼,于是被迫代替她去往敵國和親业筏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容