欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1、全景圖片的介紹

全景圖通過廣角的表現(xiàn)手段以及繪畫、相片、視頻、三維模型等形式,盡可能多表現(xiàn)出周圍的環(huán)境。360全景,即通過對專業(yè)相機(jī)捕捉整個場景的圖像信息或者使用建模軟件渲染過后的圖片,使用軟件進(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)致此處效果不好。

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

相關(guān)文章

  • numba提升python運(yùn)行速度的實(shí)例方法

    numba提升python運(yùn)行速度的實(shí)例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于numba提升python運(yùn)行速度的實(shí)例方法,有興趣的朋友們可以參考下。
    2021-01-01
  • Python實(shí)現(xiàn)快速傅里葉變換的方法(FFT)

    Python實(shí)現(xiàn)快速傅里葉變換的方法(FFT)

    這篇文章主要介紹了Python實(shí)現(xiàn)快速傅里葉變換的方法(FFT),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • python實(shí)現(xiàn)FTP服務(wù)器服務(wù)的方法

    python實(shí)現(xiàn)FTP服務(wù)器服務(wù)的方法

    本篇文章主要介紹了python實(shí)現(xiàn)FTP服務(wù)器的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • PyTorch中tensor.backward()函數(shù)的詳細(xì)介紹及功能實(shí)現(xiàn)

    PyTorch中tensor.backward()函數(shù)的詳細(xì)介紹及功能實(shí)現(xiàn)

    backward()?函數(shù)是PyTorch框架中自動求梯度功能的一部分,它負(fù)責(zé)執(zhí)行反向傳播算法以計(jì)算模型參數(shù)的梯度,這篇文章主要介紹了PyTorch中tensor.backward()函數(shù)的詳細(xì)介紹,需要的朋友可以參考下
    2024-02-02
  • 用 Python 制作地球儀的方法

    用 Python 制作地球儀的方法

    這篇文章主要介紹了如何用 Python 制作地球儀,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考即將價(jià)值,需要的朋友可以參考下
    2020-04-04
  • python學(xué)習(xí)之基于Python的人臉識別技術(shù)學(xué)習(xí)

    python學(xué)習(xí)之基于Python的人臉識別技術(shù)學(xué)習(xí)

    面部識別技術(shù)的應(yīng)用越來越廣泛,它廣泛應(yīng)用于安全系統(tǒng)、人機(jī)交互、社交媒體、醫(yī)療保健等領(lǐng)域。本文介紹了基于Python的人臉識別技術(shù),感興趣的小伙伴可以參考閱讀
    2023-03-03
  • python opencv之SURF算法示例

    python opencv之SURF算法示例

    這篇文章主要介紹了python opencv之SURF算法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Python實(shí)現(xiàn)感知機(jī)(PLA)算法

    Python實(shí)現(xiàn)感知機(jī)(PLA)算法

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)感知機(jī)(PLA)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Django獲取model中的字段名和字段的verbose_name方式

    Django獲取model中的字段名和字段的verbose_name方式

    這篇文章主要介紹了Django獲取model中的字段名和字段的verbose_name方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • selenium XPath定位的實(shí)現(xiàn)示例

    selenium XPath定位的實(shí)現(xiàn)示例

    XPath是一種在XML文檔中定位和選擇節(jié)點(diǎn)的語言,通過路徑表達(dá)式遍歷XML樹,支持節(jié)點(diǎn)選取、字符串匹配、數(shù)值計(jì)算、邏輯運(yùn)算等功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10

最新評論