python实现——在图像上放置虚拟物

本文介绍如何在图像上放置虚拟物体,利用PyOpenGL和pygame库,通过照相机标定获取图像的标定矩阵,计算单应性矩阵进行投影。首先配置PyOpenGL和pygame环境,接着展示如何在背景图片上绘制3D模型,如红色茶壶,并解决安装和运行中遇到的问题。
摘要由CSDN通过智能技术生成

前言:虚拟物是指一些3D模型,在图像上放置虚拟物就是以一张图片为背景,在把绘制的3D图放置在指定的位置上。除此之外还可以用于视频中放置虚拟物,实现动图放置3D模型。在这个例子当中,是通过照相机标定获得图像的标定矩阵,再使用单应性矩阵投影出虚拟物映射图像。

配置环境:python3.7  windows10  64位 PyOpenGL-3.1.3b2、PyOpenGL-accelerate-3.1.3b2和pygame-1.9.4

编译工具:IDLE

目录

(一)配置安装PyOpenG和pygame

(二)实现平面物体放到背景图片中

1、使用平面物体作为标记物,来计算用于新视图投影矩阵例子。

2、使用pygame绘制一个红色茶壶放置在图像上

(三)遇到的问题

完整代码及图片



(一)配置安装PyOpenGL和pygame

1、根据自己下载python版本相对应的PyOpenGL和pygame版本下载:我的python是3.7的,所以下载为箭头指向的版本

下载连接:PyOpenGL https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopengl

        下载连接:pygame  https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame

 

2、win+R打开cmd命令窗口,分别输入一下语句导入安装:注意下载成功后要把以上文件放到pip.exe的目录下,否则会找不到文件  例如:D:\Python37\Scripts

pip install PyOpenGL-3.1.3b2-cp37-cp37m-win_amd64.whl

pip install PyOpenGL_accelerate-3.1.3b2-cp37-cp37m-win_amd64.whl

pip install pygame-1.9.4-cp37-cp37m-win_amd64.whl

安装成功的显示:

(二)实现平面物体放到背景图片中

实现在图像中放置虚拟物体,第一件事就是要将图像(打算放置虚拟物体的图像)作为背景添加进来。在opengl中是通过创建一个四边形的方式来完成,绘制出四边形同时投影和模拟视图矩阵重置。

1、使用平面物体作为标记物,来计算用于新视图投影矩阵例子。

实现代码:

from pylab import *
from PIL import Image

# If you have PCV installed, these imports should work
from PCV.geometry import homography, camera
import sift

"""
This is the augmented reality and pose estimation cube example from Section 4.3.
"""


def cube_points(c, wid):
    """ Creates a list of points for plotting
        a cube with plot. (the first 5 points are
        the bottom square, some sides repeated). """
    p = []
    # bottom
    p.append([c[0]-wid, c[1]-wid, c[2]-wid])
    p.append([c[0]-wid, c[1]+wid, c[2]-wid])
    p.append([c[0]+wid, c[1]+wid, c[2]-wid])
    p.append([c[0]+wid, c[1]-wid, c[2]-wid])
    p.append([c[0]-wid, c[1]-wid, c[2]-wid]) #same as first to close plot
    
    # top
    p.append([c[0]-wid, c[1]-wid, c[2]+wid])
    p.append([c[0]-wid, c[1]+wid, c[2]+wid])
    p.append([c[0]+wid, c[1]+wid, c[2]+wid])
    p.append([c[0]+wid, c[1]-wid, c[2]+wid])
    p.append([c[0]-wid, c[1]-wid, c[2]+wid]) #same as first to close plot
    
    # vertical sides
    p.append([c[0]-wid, c[1]-wid, c[2]+wid])
    p.append([c[0]-wid, c[1]+
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值