日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python opencv進行圖像拼接

瀏覽:204日期:2022-07-31 18:49:43

本文實例為大家分享了python opencv進行圖像拼接的具體代碼,供大家參考,具體內容如下

思路和方法

思路

1、提取要拼接的兩張圖片的特征點、特征描述符;2、將兩張圖片中對應的位置點找到,匹配起來;3、如果找到了足夠多的匹配點,就能將兩幅圖拼接起來,拼接前,可能需要將第二幅圖透視旋轉一下,利用找到的關鍵點,將第二幅圖透視旋轉到一個與第一幅圖相同的可以拼接的角度;4、進行拼接;5、進行拼接后的一些處理,讓效果看上去更好。

實現方法

1、提取圖片的特征點、描述符,可以使用opencv創建一個SIFT對象,SIFT對象使用DoG方法檢測關鍵點,并對每個關鍵點周圍的區域計算特征向量。在實現時,可以使用比SIFT快的SURF方法,使用Hessian算法檢測關鍵點。因為只是進行全景圖拼接,在使用SURF時,還可以調節它的參數,減少一些關鍵點,只獲取64維而不是128維的向量等,加快速度。2、在分別提取好了兩張圖片的關鍵點和特征向量以后,可以利用它們進行兩張圖片的匹配。在拼接圖片中,可以使用Knn進行匹配,但是使用FLANN快速匹配庫更快,圖片拼接,需要用到FLANN的單應性匹配。3、單應性匹配完之后可以獲得透視變換H矩陣,用這個的逆矩陣來對第二幅圖片進行透視變換,將其轉到和第一張圖一樣的視角,為下一步拼接做準備。4、透視變換完的圖片,其大小就是最后全景圖的大小,它的右邊是透視變換以后的圖片,左邊是黑色沒有信息。拼接時可以比較簡單地處理,通過numpy數組選擇直接把第一張圖加到它的左邊,覆蓋掉重疊部分,得到拼接圖片,這樣做非常快,但是最后效果不是很好,中間有一條分割痕跡非常明顯。使用opencv指南中圖像金字塔的代碼對拼接好的圖片進行處理,整個圖片平滑了,中間的縫還是特別突兀。5、直接拼效果不是很好,可以把第一張圖疊在左邊,但是對第一張圖和它的重疊區做一些加權處理,重疊部分,離左邊圖近的,左邊圖的權重就高一些,離右邊近的,右邊旋轉圖的權重就高一些,然后兩者相加,使得過渡是平滑地,這樣看上去效果好一些,速度就比較慢。如果是用SURF來做,時間主要畫在平滑處理上而不是特征點提取和匹配。

python_opencv中主要使用的函數

0、基于python 3.7和對應的python-opencv

1、cv2.xfeatures2d.SURF_create ([hessianThreshold[, nOctaves[, nOctaveLayers[, extended[, upright]]]]])該函數用于生成一個SURF對象,在使用時,為提高速度,可以適當提高hessianThreshold,以減少檢測的關鍵點的數量,可以extended=False,只生成64維的描述符而不是128維,令upright=True,不檢測關鍵點的方向。

2、cv2.SURF.detectAndCompute(image, mask[, descriptors[, useProvidedKeypoints]])

該函數用于計算圖片的關鍵點和描述符,需要對兩幅圖都進行計算。

3、flann=cv2.FlannBasedMatcher(indexParams,searchParams)match=flann.knnMatch(descrip1,descrip2,k=2)flann快速匹配器有兩個參數,一個是indexParams,一個是searchParams,都用手冊上建議的值就可以。在創建了匹配器得到匹配數組match以后,就可以參考Lowe給出的參數,對匹配進行過濾,過濾掉不好的匹配。其中返回值match包括了兩張圖的描述符距離distance 、訓練圖(第二張)的描述符索引trainIdx 、查詢的圖(第一張)的描述符索引queryIdx 這幾個屬性。

4、M,mask=cv2.findHomography(srcPoints, dstPoints[, method[, ransacReprojThreshold[, mask]]])這個函數實現單應性匹配,返回的M是一個矩陣,即對關鍵點srcPoints做M變換能變到dstPoints的位置。

5、warpImg=cv2.warpPerspective(src,np.linalg.inv(M),dsize[,dst[,flags[,borderMode[,borderValue]]]])用這個函數進行透視變換,變換視角。src是要變換的圖片,np.linalg.inv(M)是④中M的逆矩陣,得到方向一致的圖片。

6、a=b.copy() 實現深度復制,Python中默認是按引用復制,a=b是a指向b的內存。

7、draw_params = dict(matchColor = (0,255,0),singlePointColor = (255,0,0),matchesMask = matchMask,flags = 2),img3 = cv2.drawMatches(img1,kp1,img2,kp2,good,None,**draw_params)使用drawMatches可以畫出匹配的好的關鍵點,matchMask是比較好的匹配點,之間用綠色線連接起來。

核心代碼

import cv2import numpy as npfrom matplotlib import pyplot as pltimport timeMIN = 10starttime=time.time()img1 = cv2.imread(’1.jpg’) #queryimg2 = cv2.imread(’2.jpg’) #train#img1gray=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)#img2gray=cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)surf=cv2.xfeatures2d.SURF_create(10000,nOctaves=4,extended=False,upright=True)#surf=cv2.xfeatures2d.SIFT_create()#可以改為SIFTkp1,descrip1=surf.detectAndCompute(img1,None)kp2,descrip2=surf.detectAndCompute(img2,None)FLANN_INDEX_KDTREE = 0indexParams = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)searchParams = dict(checks=50)flann=cv2.FlannBasedMatcher(indexParams,searchParams)match=flann.knnMatch(descrip1,descrip2,k=2)good=[]for i,(m,n) in enumerate(match): if(m.distance<0.75*n.distance): good.append(m)if len(good)>MIN: src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1,1,2) ano_pts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1,1,2) M,mask=cv2.findHomography(src_pts,ano_pts,cv2.RANSAC,5.0) warpImg = cv2.warpPerspective(img2, np.linalg.inv(M), (img1.shape[1]+img2.shape[1], img2.shape[0])) direct=warpImg.copy() direct[0:img1.shape[0], 0:img1.shape[1]] =img1 simple=time.time()#cv2.namedWindow('Result', cv2.WINDOW_NORMAL)#cv2.imshow('Result',warpImg) rows,cols=img1.shape[:2] for col in range(0,cols): if img1[:, col].any() and warpImg[:, col].any():#開始重疊的最左端 left = col break for col in range(cols-1, 0, -1): if img1[:, col].any() and warpImg[:, col].any():#重疊的最右一列 right = col break res = np.zeros([rows, cols, 3], np.uint8) for row in range(0, rows): for col in range(0, cols): if not img1[row, col].any():#如果沒有原圖,用旋轉的填充 res[row, col] = warpImg[row, col] elif not warpImg[row, col].any(): res[row, col] = img1[row, col] else: srcImgLen = float(abs(col - left)) testImgLen = float(abs(col - right)) alpha = srcImgLen / (srcImgLen + testImgLen) res[row, col] = np.clip(img1[row, col] * (1-alpha) + warpImg[row, col] * alpha, 0, 255) warpImg[0:img1.shape[0], 0:img1.shape[1]]=res final=time.time() img3=cv2.cvtColor(direct,cv2.COLOR_BGR2RGB) plt.imshow(img3,),plt.show() img4=cv2.cvtColor(warpImg,cv2.COLOR_BGR2RGB) plt.imshow(img4,),plt.show() print('simple stich cost %f'%(simple-starttime)) print('ntotal cost %f'%(final-starttime)) cv2.imwrite('simplepanorma.png',direct) cv2.imwrite('bestpanorma.png',warpImg) else: print('not enough matches!')

運行結果

原圖1.jpg

python opencv進行圖像拼接

原圖2.jpg

python opencv進行圖像拼接

特征點匹配

python opencv進行圖像拼接

直接拼接和平滑對比

python opencv進行圖像拼接

效果

python opencv進行圖像拼接

本文已被收錄到專題《python圖片處理操作》 ,歡迎大家點擊學習更多精彩內容。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲天堂一区二区| 色综合狠狠操| 国产v日韩v欧美v| 久久不射中文字幕| 日韩免费精品| 99久久久国产精品美女| 国产日韩视频| 亚洲午夜电影| 欧美激情一区| 亚洲精品高潮| 国产毛片久久| 玖玖玖国产精品| 日韩一区二区免费看| 国产成人精品一区二区免费看京| 亚洲永久精品唐人导航网址| 亚州av乱码久久精品蜜桃| 久久夜夜操妹子| 成人污污视频| 国产精品男女| 美女毛片一区二区三区四区最新中文字幕亚洲| 欧美特黄一区| 国产精品精品国产一区二区| 日韩av中文在线观看| 欧美午夜网站| 麻豆精品国产91久久久久久| 国产精品成人**免费视频| 国产精品夜夜夜| 国产精品sss在线观看av| 国产一区三区在线播放| 韩国精品主播一区二区在线观看| 国产一区2区| 999久久久精品国产| 国产精品日本| 国产毛片精品久久| 国产精品久久久一区二区| 精品国产网站| 国产一区亚洲| 亚洲免费成人av在线| 久久精品一区二区国产| 国产一区日韩欧美| 亚洲精品黄色| 91精品在线观看国产| 久久国产高清| 日韩专区欧美专区| 丁香婷婷久久| 日韩中文字幕91| 午夜欧美巨大性欧美巨大| 久久一区国产| 黄色日韩精品| 色一区二区三区四区| 在线观看一区| 超碰在线99| 在线视频观看日韩| 91精品在线免费视频| 久久视频国产| 日本一二区不卡| 国产精品欧美日韩一区| 在线观看免费一区二区| 精品国产亚洲日本| 国产精品亚洲四区在线观看| 国产视频一区免费看| 亚洲五月综合| 日韩视频二区| 日本在线啊啊| 成人在线视频免费| 日韩精品亚洲一区二区三区免费| 日韩欧美午夜| 国产亚洲电影| 日韩欧美久久| 蜜臀av一区二区在线免费观看| 男人操女人的视频在线观看欧美| 欧美13videosex性极品| 精品日产乱码久久久久久仙踪林| 欧美亚洲网站| 国产精品久久免费视频| 亚洲欧美日本视频在线观看| 欧美日韩中文一区二区| 久久蜜桃av| 免费成人性网站| 亚洲乱码视频| 国产视频久久| 免费精品视频在线| 午夜精品影院| 在线精品国产亚洲| 免费日韩成人| 日韩欧美精品一区| 久久精品观看| 久久高清国产| 久久久久97| 欧美成人a交片免费看| 高清一区二区三区av| 日韩精品第一区| 久久久久久久久久久9不雅视频| 激情欧美丁香| 久久久亚洲欧洲日产| 精品视频在线你懂得| 伊人久久视频| 在线一区电影| 久久狠狠久久| 日本欧美在线看| 97精品国产福利一区二区三区| 久久婷婷久久| 69堂精品视频在线播放| 日韩电影二区| 精品国产美女a久久9999| 国产一区亚洲| 国产乱子精品一区二区在线观看| 日韩在线观看不卡| 久久精品99国产精品| 天堂成人免费av电影一区| 免费在线观看一区| 亚洲专区一区| 韩国一区二区三区视频| 在线视频亚洲欧美中文| 日韩大片在线播放| 亚洲va久久久噜噜噜久久| 国产一区二区三区不卡视频网站| 三级一区在线视频先锋| 日本一区二区免费高清| 欧美日韩 国产精品| 巨乳诱惑日韩免费av| 91精品xxx在线观看| 国产欧美自拍| 91精品国产自产观看在线| 综合国产在线| 亚洲永久字幕| 中文另类视频| 国产劲爆久久| 在线免费观看亚洲| 蜜桃视频免费观看一区| 欧美日韩精品免费观看视欧美高清免费大片 | 亚洲精品国产日韩| 一区福利视频| 亚洲v在线看| 亚洲毛片在线免费| 亚洲v天堂v手机在线| 美国三级日本三级久久99| 亚洲欧美日韩国产一区| 亚洲深爱激情| 亚洲一级少妇| 亚洲二区视频| 免费视频一区三区| 视频一区二区三区在线| 亚洲一区二区日韩| 日韩一区二区三区高清在线观看 | 日韩欧美精品一区二区综合视频| 中文字幕日韩欧美精品高清在线| 日精品一区二区三区| 群体交乱之放荡娇妻一区二区| 91亚洲人成网污www| 青青久久av| 四虎国产精品免费久久| 国产精品二区不卡| 久久久久久久久丰满| av一区二区高清| 亚洲精品免费观看| 国产极品嫩模在线观看91精品| 精品国产乱码| 成人国产精品一区二区免费麻豆| 香蕉人人精品| 日韩黄色在线观看| 国产一区二区亚洲| 亚洲有吗中文字幕| 国产欧美二区| 国产一区国产二区国产三区| 激情综合网五月| 欧美日韩亚洲一区二区三区在线| 欧美日韩国产v| 日韩国产欧美一区二区三区| 成年男女免费视频网站不卡| 中文字幕日韩欧美精品高清在线| 国内不卡的一区二区三区中文字幕| 九九久久电影| 久久香蕉网站| 日本不卡视频在线观看| 日韩av片子| 国产探花在线精品| 久久最新视频| 精品欧美一区二区三区在线观看| 日本一区免费网站| 在线日韩欧美| 欧美黄色网页| 成人影视亚洲图片在线| 国产剧情在线观看一区| 在线一区免费观看| 国产在线一区不卡| 青青草伊人久久| 亚洲精品韩国| 亚洲人成精品久久久| 首页国产欧美日韩丝袜| 久久久人人人| 欧美精品高清| 久久这里只有精品一区二区| 亚洲综合五月| 三级亚洲高清视频| 亚洲人成网77777色在线播放 | 国产福利一区二区精品秒拍 | 久久精品国产68国产精品亚洲| 97精品国产一区二区三区| 91亚洲无吗|