用python做opengl的编程_2020-04-26 利用OpenGL与PyThon实现简易AR程序(三)

该程序需要用到camera_mtx.txt为相机内参数矩阵文本文档,camera_dist.txt为畸变参数矩阵文本文档,TEST.png为标记图像。生成方法在上一章

AR 算法

1a89ef24abcc

QQ图片20200426102332.png

ARDemo类实现绘制摄像机帧图像,三维模型

import cv2

import numpy as np

from OpenGL.GL import *

from OpenGL.GLUT import *

from PIL import Image

import logging

from pattern_detector import PatternDetector

class ARDemo:

def __init__(self, mark_image_name):

self.camera_mtx = np.loadtxt('camera_mtx.txt')

self.camera_dist = np.loadtxt('camera_dist.txt')

self.camera = cv2.VideoCapture(0+cv2.CAP_DSHOW)

self.camera.open(0+cv2.CAP_DSHOW)

self.image_width = int(self.camera.get(cv2.CAP_PROP_FRAME_WIDTH))

self.image_height = int(self.camera.get(cv2.CAP_PROP_FRAME_HEIGHT))

self.scene_image = None

self.scene_tex_id = 0 # 帧图像纹理句柄

self.mark_image = cv2.imread(mark_image_name)

self.decetor = PatternDetector(self.mark_image, self.camera_mtx, self.camera_dist)

self.proj_mat = self.decetor.get_gl_proj_mat(self.image_width, self.image_height)

self.modelview_mat = np.eye(4).flatten()

self.wait_count = 0

glutInit()

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)

glutInitWindowPosition(0, 0)

glutInitWindowSize(self.image_width, self.image_height)

glutCreateWindow('AR Demo')

glutDisplayFunc(self.display_event)

glutIdleFunc(self.display_event)

glutWMCloseFunc(self.close_event)

self.init_gl()

# 异常处理装饰器, 捕捉func执行时产生的异常, 在异常发生后关闭摄像头并退出

def process_exception(func):

def wrap(self):

try:

func(self)

except Exception as e:</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值