最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python opencv 圖像拼接的實(shí)現(xiàn)方法

 更新時(shí)間:2019年06月27日 14:49:29   作者:gqcngu  
高級(jí)圖像拼接也叫作基于特征匹配的圖像拼接,拼接時(shí)消去兩幅圖像相同的部分,實(shí)現(xiàn)拼接合成全景圖。這篇文章主要介紹了python opencv 圖像拼接,需要的朋友可以參考下

初級(jí)的圖像拼接為將兩幅圖像簡(jiǎn)單的粘貼在一起,僅僅是圖像幾何空間的轉(zhuǎn)移與合成,與圖像內(nèi)容無(wú)關(guān)。高級(jí)圖像拼接也叫作基于特征匹配的圖像拼接,拼接時(shí)消去兩幅圖像相同的部分,實(shí)現(xiàn)拼接合成全景圖。

具有相同尺寸的圖A和圖B含有相同的部分與不同的部分,如圖所示:

           

用基于特征的圖像拼接實(shí)現(xiàn)后:

設(shè)圖像高為h,相同部分的寬度為wx

拼接后圖像的寬w=wA+wB-wx

因此,可以先構(gòu)建一個(gè)高為h,寬為W*2的空白圖像,將左圖像向右平移wx,右圖像粘貼在右側(cè)。則右圖像剛好覆蓋左圖像中的相同部分。最終拼接圖像完成,完成后的圖像左側(cè)有寬度為wx的空白即為所檢測(cè)出的兩幅圖像的相同部分,可根據(jù)需要選擇是否去除。示例圖如下。

實(shí)現(xiàn)上述效果的步驟如下:

1. 采用surft特征檢測(cè)算法檢測(cè)兩幅圖像的關(guān)鍵特征點(diǎn);

2. 建立FLANN匹配器,采用目前最快的特征匹配(最近鄰搜索)算法FlannBasedMatcher匹配關(guān)鍵點(diǎn)

3.從所匹配的全部關(guān)鍵點(diǎn)中篩選出優(yōu)秀的特征點(diǎn)(基于距離篩選)

4. 根據(jù)查詢圖像和模板圖像的特征描述子索引得出仿射變換矩陣

5. 獲取左邊圖像到右邊圖像的投影映射關(guān)系

6. 透視變換將左圖像放在相應(yīng)的位置

7. 將有圖像拷貝到特定位置完成拼接

先放python下利用opencv 進(jìn)行圖像拼接的代碼,環(huán)境為python2.7+opencv2:

#coding: utf-8
import numpy as np
import cv2
leftgray = cv2.imread('1.jpg')
rightgray = cv2.imread('2.jpg')
hessian=400
surf=cv2.SURF(hessian) #將Hessian Threshold設(shè)置為400,閾值越大能檢測(cè)的特征就越少
kp1,des1=surf.detectAndCompute(leftgray,None) #查找關(guān)鍵點(diǎn)和描述符
kp2,des2=surf.detectAndCompute(rightgray,None)
FLANN_INDEX_KDTREE=0 #建立FLANN匹配器的參數(shù)
indexParams=dict(algorithm=FLANN_INDEX_KDTREE,trees=5) #配置索引,密度樹(shù)的數(shù)量為5
searchParams=dict(checks=50) #指定遞歸次數(shù)
#FlannBasedMatcher:是目前最快的特征匹配算法(最近鄰搜索)
flann=cv2.FlannBasedMatcher(indexParams,searchParams) #建立匹配器
matches=flann.knnMatch(des1,des2,k=2) #得出匹配的關(guān)鍵點(diǎn)
good=[]
#提取優(yōu)秀的特征點(diǎn)
for m,n in matches:
 if m.distance < 0.7*n.distance: #如果第一個(gè)鄰近距離比第二個(gè)鄰近距離的0.7倍小,則保留
  good.append(m)
src_pts = np.array([ kp1[m.queryIdx].pt for m in good]) #查詢圖像的特征描述子索引
dst_pts = np.array([ kp2[m.trainIdx].pt for m in good]) #訓(xùn)練(模板)圖像的特征描述子索引
H=cv2.findHomography(src_pts,dst_pts)   #生成變換矩陣
h,w=leftgray.shape[:2]
h1,w1=rightgray.shape[:2]
shft=np.array([[1.0,0,w],[0,1.0,0],[0,0,1.0]])
M=np.dot(shft,H[0])   #獲取左邊圖像到右邊圖像的投影映射關(guān)系
dst_corners=cv2.warpPerspective(leftgray,M,(w*2,h))#透視變換,新圖像可容納完整的兩幅圖
cv2.imshow('tiledImg1',dst_corners) #顯示,第一幅圖已在標(biāo)準(zhǔn)位置
dst_corners[0:h,w:w*2]=rightgray #將第二幅圖放在右側(cè)
#cv2.imwrite('tiled.jpg',dst_corners)
cv2.imshow('tiledImg',dst_corners)
cv2.imshow('leftgray',leftgray)
cv2.imshow('rightgray',rightgray)
cv2.waitKey()
cv2.destroyAllWindows()

所用圖像為:

   

拼接完成后的圖像為:

測(cè)試一下抗干擾能力,所用圖像:

     

拼接結(jié)果:

可見(jiàn),抗干擾能力還是不錯(cuò)的,在測(cè)試中若拼接不成功,則注意以下兩點(diǎn):

1. 所用兩幅圖像尺寸是否相同,是否有相同的部分。

2. 適當(dāng)調(diào)整hessian的值。

總結(jié)

以上所述是小編給大家介紹的python opencv 圖像拼接的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • Python中文件I/O高效操作處理的技巧分享

    Python中文件I/O高效操作處理的技巧分享

    文件I/O是Python中最重要的技術(shù)之一,在Python中對(duì)文件進(jìn)行I/O操作是非常簡(jiǎn)單的。但如何高效的操作處理是需要技巧的,下面這篇文章就主要介紹了Python中文件I/O高效操作處理的技巧,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • python如何在一個(gè)py文件中獲取另一個(gè)py文件中的值(一個(gè)或多個(gè))

    python如何在一個(gè)py文件中獲取另一個(gè)py文件中的值(一個(gè)或多個(gè))

    這篇文章主要介紹了python如何在一個(gè)py文件中獲取另一個(gè)py文件中的值(一個(gè)或多個(gè)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 解決Jupyter notebook中.py與.ipynb文件的import問(wèn)題

    解決Jupyter notebook中.py與.ipynb文件的import問(wèn)題

    這篇文章主要介紹了解決Jupyter notebook中.py與.ipynb文件的import問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 詳解Django中 render() 函數(shù)的使用方法

    詳解Django中 render() 函數(shù)的使用方法

    這篇文章主要介紹了Django中 render() 函數(shù)的使用方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 使用python獲取電腦的磁盤信息方法

    使用python獲取電腦的磁盤信息方法

    今天小編就為大家分享一篇使用python獲取電腦的磁盤信息方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Python簡(jiǎn)單獲取二維數(shù)組行列數(shù)的方法示例

    Python簡(jiǎn)單獲取二維數(shù)組行列數(shù)的方法示例

    這篇文章主要介紹了Python簡(jiǎn)單獲取二維數(shù)組行列數(shù)的方法,結(jié)合實(shí)例形式分析了Python基于numpy模塊的二維數(shù)組相關(guān)運(yùn)算技巧,需要的朋友可以參考下
    2018-12-12
  • 深入理解python try異常處理機(jī)制

    深入理解python try異常處理機(jī)制

    下面小編就為大家?guī)?lái)一篇深入理解python try異常處理機(jī)制。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 一篇文章帶你了解Python和Java的正則表達(dá)式對(duì)比

    一篇文章帶你了解Python和Java的正則表達(dá)式對(duì)比

    正則表達(dá)式有元字符及不同組合來(lái)構(gòu)成,通過(guò)巧妙的構(gòu)造正則表達(dá)式可以匹配任意字符串,并完成復(fù)雜的字符串處理任務(wù),希望本片文章能給你帶來(lái)幫助
    2021-09-09
  • Python讀取網(wǎng)頁(yè)內(nèi)容的方法

    Python讀取網(wǎng)頁(yè)內(nèi)容的方法

    這篇文章主要介紹了Python讀取網(wǎng)頁(yè)內(nèi)容的方法,實(shí)例分析了Python基于URL讀取網(wǎng)頁(yè)內(nèi)容的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python 基于UDP協(xié)議套接字通信的實(shí)現(xiàn)

    python 基于UDP協(xié)議套接字通信的實(shí)現(xiàn)

    這篇文章主要介紹了python 基于UDP協(xié)議套接字通信的實(shí)現(xiàn),幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01

最新評(píng)論

横山县| 五家渠市| 萨嘎县| 雅安市| 汉寿县| 兴文县| 镇远县| 娄烦县| 建始县| 唐海县| 上饶县| 朝阳县| 凌源市| 卢龙县| 铜山县| 陇南市| 庆元县| 安福县| 疏勒县| 荥阳市| 杭锦后旗| 棋牌| 海丰县| 红安县| 碌曲县| 永寿县| 灵台县| 庆元县| 溧阳市| 天津市| 永平县| 宕昌县| 灵武市| 祁阳县| 酒泉市| 邵东县| 澄城县| 中宁县| 福贡县| 襄樊市| 安泽县|