python两张图在一张上,三张图片无缝合成一张怎么做,python把两张图片合成一张
在本文的示例中,python与大家分享了在全景图像中生成两张图像的具体代码。具体内容如下
1、全景影像简介
全景图通过广角的表现手段和绘画、照片、视频、三维模型等形式,尽可能多地表现周围的环境。 360全景是指用专业的摄像机拍摄整个场景的图像信息,用建模软件将渲染的图像用软件进行图像融合,用专用的播放器播放。也就是说,将平面照片和计算机建模图像360度全观用于虚拟现实的观察,将二维平面图模拟成实际的三维空间提供给观赏者。
2、如何实现
2.1、实现原理
主要利用撒的特征提取和匹配来参考链接
2.2、实现代码
#-* -编码:utf-8-* -
u
2019年6月14日创建
@作者:武罗
""
__作者__=武罗
__版本__=1.0.0
__company__=u 重庆交大
__更新__=2019-06-14
导入编号为公证人
将cv2作为简历导入
来自太平航运导入图像
frommatplotlibimportpyplotasplt
打印(cvversion:cv .__version__))
定义(: )
顶部,机器人,左侧,右侧=100,100,0,500
img1=cv.im read (g :/2018和2019两个/钱/wuluo1 .png))))))。
cv.imshow(img1)、img1)。
img2=cv.im read (g :/2018和2019二/钱/wuluo2 .png))))))。
cv.imshow(img2)、img2)。
srcImg=cv.copyMakeBorder(
img1,顶部,机器人,左侧,右侧,简历.BORDER_CONSTANT,value=(0,0,0))
testImg=cv.copyMakeBorder(
img2,顶部,机器人,左侧,右侧,cv .BORDER_CONSTANT,value=(0,0,0))
img1gray=cv.cvtcolor(srcimg,cv .COLOR_BGR2GRAY))。
img2gray=cv.cvtcolor(testimg,cv .COLOR_BGR2GRAY))))))))))))))))))))。
sift=cv.xfeatures2d_SIFT().创建)).
# findthekeypointsanddescriptorswithsift
kp1,德S1=筛。检测并计算(img 1灰色,无)))))))))))))))))))))))。
kp2,德S2=筛。检测并计算(img 2 gray,None))))))))))))))))))))))))))))。
#弗兰参数
FLANN_INDEX_KDTREE=1
index _ params=dict(algorithm=flann _ index _ KD tree,trees=5)))))))))))))))index _ params)
search_Params=Dict(checks=50))))))))))))))))))。
flann=cv。flanbasedmatcher(index _ params,search_params))()))))))))))))))))))))))))))))
匹配=弗兰恩.KNNmatch(des1,des2,k=2))。
#只需要绘制好的匹配,所以创建一个遮罩
匹配掩码=[ 0,0 ] foriinrange (len (matches))
好=[]
pts1=[]
pts2=[]
#根据劳氏文件进行比率测试
对于我,我,n(嵌入式(匹配项) :
中间距离0.7 *中间距离:
good.append(m))。
pts2.append(KP2[m.trainidx].pt)))))))))))))。
PTS1.append(KP1[m.Queryidx].pt))))))))))))))))))))。
匹配掩码[ I ]=[ 1,0 ]
draw _ params=dict (match color=(0,255,0),
singlepointcolor=(255,0,0),
matchesMask=matchesMask,
标志=0)
img 3=cv。drawmatchesknn(img 1 gray,kp1,img2gray,
kp2,匹配,无,**draw_params)
#PLT.imshow(img3,)、plt.show)。
rows,cols=srcImg.shape[:2]
最小匹配计数=10
iflen(良好)最小匹配计数:
src_pts=np.float32(
([kp1[m.queryIdx].元素铂的符号为我很好.整形(-1,1,2))).
dst_pts=np.float32(
[kp2]m . train idx .元素铂的符号为我很好.整形(-1,1,2))).
m,mask=cv。发现单应性(src_pts,dst_pts,cv .RANSAC,5.0))))。
翘曲img=cv。扭曲透视(testimg,np.array(
m () ) testImg.shape[1],testImg.shape[0],flags=cv .WARP_INVERSE_MAP))
forcolinrange(0,列) :
if srcImg[:col].any(andwarpimg[:col].任何) ) :
左=列
布莱克
对于colinrange(列-1,0,-1):
if srcImg[:col].any(andwarpimg[:col].任何) ) :
右=列
布莱克
RES=NP .零([Rows,cols,3],np.uint8))。
forrowinrange(0,行) :
forcolinrange(0,列) :
如果不是行,列.any():
res[row,col]=warpImg[row,col]
elif not warp ing[row,col].any():
res[row,col]=srcImg[row,col]
否则:
scimglen=float(ABS(col-left))
testimglen=float(ABS(col-right))
alpha=srcimglen/(srcimglentestimglen))。
res[row,col]=np.clip(
srcImg[row,col ] * (1- alpha (warp img [ row,col ] * alpha (warp img [ row,col ] * alpha)))))
# opencv是matplotlib是rgb
RES=cv.cvtcolor(RES,cv .COLOR_BGR2RGB)。
#展示结果
平面图(
PLT.imshow(RES))。
plt.show())
否则:
notenoughmatchesarefound-{ }/{ } .格式(伦)良好,最小匹配计数))
matchesMask=None
if __name__==__main__ :
品杰() ) )
3、运行效果
原两张图:
效果图:
原图,杯子处理得不好,这里没有效果。
以上是本文的全部内容,希望对大家的学习有帮助。另外,希望你能多多支持聚米学院。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。