前言:虚拟物是指一些3D模型,在图像上放置虚拟物就是以一张图片为背景,在把绘制的3D图放置在指定的位置上。除此之外还可以用于视频中放置虚拟物,实现动图放置3D模型。在这个例子当中,是通过照相机标定获得图像的标定矩阵,再使用单应性矩阵投影出虚拟物映射图像。
配置环境:python3.7 windows10 64位 PyOpenGL-3.1.3b2、PyOpenGL-accelerate-3.1.3b2和pygame-1.9.4
编译工具:IDLE
目录
(一)配置安装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]+