python两张图在一张上,三张图片无缝合成一张怎么做,python把两张图片合成一张

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: