电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python opencv進行圖像拼接

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

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

思路和方法

思路

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

實現(xiàn)方法

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

python_opencv中主要使用的函數(shù)

0、基于python 3.7和對應(yīng)的python-opencv

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

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

該函數(shù)用于計算圖片的關(guān)鍵點和描述符,需要對兩幅圖都進行計算。

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

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

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

6、a=b.copy() 實現(xiàn)深度復(fù)制,Python中默認(rèn)是按引用復(fù)制,a=b是a指向b的內(nèi)存。

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可以畫出匹配的好的關(guān)鍵點,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():#如果沒有原圖,用旋轉(zhuǎn)的填充 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!')

運行結(jié)果

原圖1.jpg

python opencv進行圖像拼接

原圖2.jpg

python opencv進行圖像拼接

特征點匹配

python opencv進行圖像拼接

直接拼接和平滑對比

python opencv進行圖像拼接

效果

python opencv進行圖像拼接

本文已被收錄到專題《python圖片處理操作》 ,歡迎大家點擊學(xué)習(xí)更多精彩內(nèi)容。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 数显恒温油浴-电砂浴-高温油浴振荡器-常州迈科诺仪器有限公司 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 直线模组_滚珠丝杆滑台_模组滑台厂家_万里疆科技 | 垃圾压缩设备_垃圾处理设备_智能移动式垃圾压缩设备--山东明莱环保设备有限公司 | 乐考网-银行从业_基金从业资格考试_初级/中级会计报名时间_中级经济师 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 鲁网 - 山东省重点新闻网站,山东第一财经门户 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 清洁设备_洗地机/扫地机厂家_全自动洗地机_橙犀清洁设备官网 | 郑州宣传片拍摄-TVC广告片拍摄-微电影短视频制作-河南优柿文化传媒有限公司 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 液氨泵,液化气泵-淄博「亚泰」燃气设备制造有限公司 | 实验室隔膜泵-无油防腐蚀隔膜泵-耐腐蚀隔膜真空泵-杭州景程仪器 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 工业rfid读写器_RFID工业读写器_工业rfid设备厂商-ANDEAWELL | 河南道路标志牌_交通路标牌_交通标志牌厂家-郑州路畅交通 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | 诗词大全-古诗名句 - 古诗词赏析| 一礼通 (www.yilitong.com)-企业礼品解决方案一站式服务平台 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 密封无忧网 _ 专业的密封产品行业信息网| 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 北京百度网站优化|北京网站建设公司-百谷网络科技 | 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 威海防火彩钢板,威海岩棉复合板,威海彩钢瓦-文登区九龙岩棉复合板厂 | 真空包装机-诸城市坤泰食品机械有限公司 |