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

python如何將兩張圖片生成為全景圖片

 更新時(shí)間:2020年03月05日 09:19:14   作者:無落  
這篇文章主要為大家詳細(xì)介紹了python如何將兩張圖片生成為全景圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python將兩張圖片生成全景圖片的具體代碼,供大家參考,具體內(nèi)容如下

1、全景圖片的介紹

全景圖通過廣角的表現(xiàn)手段以及繪畫、相片、視頻、三維模型等形式,盡可能多表現(xiàn)出周圍的環(huán)境。360全景,即通過對(duì)專業(yè)相機(jī)捕捉整個(gè)場(chǎng)景的圖像信息或者使用建模軟件渲染過后的圖片,使用軟件進(jìn)行圖片拼合,并用專門的播放器進(jìn)行播放,即將平面照片或者計(jì)算機(jī)建模圖片變?yōu)?60 度全觀,用于虛擬現(xiàn)實(shí)瀏覽,把二維的平面圖模擬成真實(shí)的三維空間,呈現(xiàn)給觀賞者。

2、如何實(shí)現(xiàn)

2.1、實(shí)現(xiàn)原理

主要是利用sift的特征提取與匹配,參考鏈接

2.2、實(shí)現(xiàn)代碼

# -*- coding:utf-8 -*-
u'''
Created on 2019年6月14日
@author: wuluo
'''
__author__ = 'wuluo'
__version__ = '1.0.0'
__company__ = u'重慶交大'
__updated__ = '2019-06-14'
import numpy as np
import cv2 as cv
from PIL import Image
from matplotlib import pyplot as plt
print('cv version: ', cv.__version__)

def pinjie():
 top, bot, left, right = 100, 100, 0, 500
 img1 = cv.imread('G:/2018and2019two/qianrushi/wuluo1.png')
 cv.imshow("img1", img1)
 img2 = cv.imread('G:/2018and2019two/qianrushi/wuluo2.png')
 cv.imshow("img2", img2)
 srcImg = cv.copyMakeBorder(
  img1, top, bot, left, right, cv.BORDER_CONSTANT, value=(0, 0, 0))
 testImg = cv.copyMakeBorder(
  img2, top, bot, left, right, 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().create()
 # find the keypoints and descriptors with SIFT
 kp1, des1 = sift.detectAndCompute(img1gray, None)
 kp2, des2 = sift.detectAndCompute(img2gray, None)
 # FLANN parameters
 FLANN_INDEX_KDTREE = 1
 index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
 search_params = dict(checks=50)
 flann = cv.FlannBasedMatcher(index_params, search_params)
 matches = flann.knnMatch(des1, des2, k=2)
 
 # Need to draw only good matches, so create a mask
 matchesMask = [[0, 0] for i in range(len(matches))]

 good = []
 pts1 = []
 pts2 = []
 # ratio test as per Lowe's paper
 for i, (m, n) in enumerate(matches):
  if m.distance < 0.7 * n.distance:
   good.append(m)
   pts2.append(kp2[m.trainIdx].pt)
   pts1.append(kp1[m.queryIdx].pt)
   matchesMask[i] = [1, 0]

 draw_params = dict(matchColor=(0, 255, 0),
      singlePointColor=(255, 0, 0),
      matchesMask=matchesMask,
      flags=0)
 img3 = cv.drawMatchesKnn(img1gray, kp1, img2gray,
        kp2, matches, None, **draw_params)
 #plt.imshow(img3, ), plt.show()

 rows, cols = srcImg.shape[:2]
 MIN_MATCH_COUNT = 10
 if len(good) > MIN_MATCH_COUNT:
  src_pts = np.float32(
   [kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
  dst_pts = np.float32(
   [kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
  M, mask = cv.findHomography(src_pts, dst_pts, cv.RANSAC, 5.0)
  warpImg = cv.warpPerspective(testImg, np.array(
   M), (testImg.shape[1], testImg.shape[0]), flags=cv.WARP_INVERSE_MAP)

  for col in range(0, cols):
   if srcImg[:, col].any() and warpImg[:, col].any():
    left = col
    break
  for col in range(cols - 1, 0, -1):
   if srcImg[:, 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 srcImg[row, col].any():
     res[row, col] = warpImg[row, col]
    elif not warpImg[row, col].any():
     res[row, col] = srcImg[row, col]
    else:
     srcImgLen = float(abs(col - left))
     testImgLen = float(abs(col - right))
     alpha = srcImgLen / (srcImgLen + testImgLen)
     res[row, col] = np.clip(
      srcImg[row, col] * (1 - alpha) + warpImg[row, col] * alpha, 0, 255)

  # opencv is bgr, matplotlib is rgb
  res = cv.cvtColor(res, cv.COLOR_BGR2RGB)
  # show the result
  plt.figure()
  plt.imshow(res)
  plt.show()
 else:
  print("Not enough matches are found - {}/{}".format(len(good), MIN_MATCH_COUNT))
  matchesMask = None

if __name__ == "__main__":
 pinjie()

3、運(yùn)行效果

原始的兩張圖:

效果圖:

原始圖,水杯沒有處理好,導(dǎo)致此處效果不好。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python hashlib模塊加密過程解析

    Python hashlib模塊加密過程解析

    這篇文章主要介紹了Python hashlib模塊加密過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python3調(diào)用windows dos命令的例子

    python3調(diào)用windows dos命令的例子

    今天小編就為大家分享一篇python3調(diào)用windows dos命令的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python Tkinter Entry和Text的添加與使用詳解

    Python Tkinter Entry和Text的添加與使用詳解

    這篇文章主要介紹了Python Tkinter Entry和Text的添加與使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python動(dòng)態(tài)進(jìn)度條的實(shí)現(xiàn)代碼

    python動(dòng)態(tài)進(jìn)度條的實(shí)現(xiàn)代碼

    有時(shí)候我們需要使用print打印工作進(jìn)度,正常使用print函數(shù)會(huì)導(dǎo)致刷屏的現(xiàn)象,本文通過實(shí)例代碼給大家介紹python動(dòng)態(tài)進(jìn)度條的實(shí)現(xiàn)方法,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • Python解析壓縮包內(nèi)部文件的后綴名并分類存放

    Python解析壓縮包內(nèi)部文件的后綴名并分類存放

    這篇文章主要為大家詳細(xì)介紹了如何使用Python解析壓縮包內(nèi)部文件的后綴名并分類存放,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • python實(shí)現(xiàn)對(duì)AES加密的視頻數(shù)據(jù)流解密的方法

    python實(shí)現(xiàn)對(duì)AES加密的視頻數(shù)據(jù)流解密的方法

    密碼學(xué)中的高級(jí)加密標(biāo)準(zhǔn)(Advanced?Encryption?Standard,AES),又稱Rijndael加密法,這篇文章主要介紹了用python實(shí)現(xiàn)對(duì)AES加密的視頻數(shù)據(jù)流解密,需要的朋友可以參考下
    2023-02-02
  • pandas按某2列進(jìn)行分層隨機(jī)抽樣的實(shí)現(xiàn)

    pandas按某2列進(jìn)行分層隨機(jī)抽樣的實(shí)現(xiàn)

    本文主要介紹了pandas按某2列進(jìn)行分層隨機(jī)抽樣的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Django ManyToManyField 跨越中間表查詢的方法

    Django ManyToManyField 跨越中間表查詢的方法

    今天小編就為大家分享一篇Django ManyToManyField 跨越中間表查詢的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 在Python中執(zhí)行和調(diào)用JavaScript的多種方法小結(jié)

    在Python中執(zhí)行和調(diào)用JavaScript的多種方法小結(jié)

    JavaScript(JS)是一種常用的腳本語言,通常用于網(wǎng)頁(yè)開發(fā),但有時(shí)也需要在Python中執(zhí)行或調(diào)用JavaScript代碼,本文將詳細(xì)介紹Python中執(zhí)行和調(diào)用JavaScript的多種方法,每種方法都將附有示例代碼,方便理解如何在Python中與JavaScript進(jìn)行互動(dòng),需要的朋友可以參考下
    2023-11-11
  • Python 實(shí)現(xiàn)微信防撤回功能

    Python 實(shí)現(xiàn)微信防撤回功能

    在微信上突然看到“XXX撤回一條消息”的時(shí)候,心里癢不癢?現(xiàn)在就教你如何使用python實(shí)現(xiàn)消息防撤回的功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2019-04-04

最新評(píng)論

福州市| 台湾省| 邛崃市| 丰宁| 永安市| 杭州市| 涡阳县| 沁水县| 南宫市| 房产| 林芝县| 晴隆县| 陵水| 麟游县| 潮安县| 穆棱市| 图木舒克市| 高密市| 凌海市| 安塞县| 金坛市| 萨嘎县| 新野县| 达尔| 鹤山市| 高清| 东阿县| 简阳市| 涟水县| 和平县| 教育| 镇江市| 武穴市| 同心县| 阿拉善右旗| 怀安县| 德兴市| 万盛区| 晋宁县| 叶城县| 鸡泽县|