Schwarzer教你用OpenCV实现基于标记的AR

本文提供了一步步教你如何使用OpenCV进行基于标记的增强现实(AR)开发,包括图像颜色转换、边界获取、四边形寻找、变形校验和绘图等关键步骤。通过实例代码解析,帮助读者理解并实现一个基本的AR应用。
摘要由CSDN通过智能技术生成

导读

本文将一步步教您如何使用OpenCV实现基于一个标记的简单AR

作者开发环境:

Windows 10 (64bit)
Visual Studio 2015
OpenCV 3.2.0

源代码

您可以在此处获取源代码工程 去Github

使用的标记:

您可以打印下来,一张纸上打印多个便识别多个

标记

Step 1 开始

在IDE中创建C++工程,并添加好OpenCV的相关环境配置,添加一个源文件,例如命名为SimpleAR.cpp

添加 include 并 使用命名空间
#include<opencv2\opencv.hpp>
#include<iostream>
#include<math.h>

using namespace cv;
using namespace std;

Step 2 类介绍

class MarkerBasedARProcessor
{
    Mat Image, ImageGray, ImageAdaptiveBinary; //分别是 原图像 灰度图像 自适应阈值化图像
    vector<vector<Point>> ImageContours; //图像所有边界信息
    vector<vector<Point2f>> ImageQuads, ImageMarkers; //图像所有四边形 与 验证成功的四边形

    vector<Point2f> FlatMarkerCorners; //正方形化标记时用到的信息
    Size FlatMarkerSize; //正方形化标记时用到的信息

    //7x7黑白标记的颜色信息
    uchar CorrectMarker[7 * 7] =
    {
        0,0,0,0,0,0,0,
        0,0,0,0,0,255,0,
        0,0,255,255,255,0,0,
        0,255,255,255,0,255,0,
        0,255,255,255,0,255,0,
        0,255,255,255,0,255,0,
        0,0,0,0,0,0,0
    };

    void Clean(); // 用于新一帧处理前的初始化
    void ConvertColor(); //转换图片颜色
    void GetContours(int ContourCountThreshold); //获取图片所有边界
    void FindQuads(int ContourLengthThreshold); //寻找所有四边形
    void TransformVerifyQuads(); //变换为正方形并验证是否为标记
    void DrawMarkerBorder(Scalar Color); //绘制标记边界
    void DrawImageAboveMarker(); //在标记上绘图

    bool MatchQuadWithMarker(Mat & Quad); // 检验正方形是否为标记
    float CalculatePerimeter(const vector<Point2f> &Points); // 计算周长
public:
    Mat ImageToDraw;// 要在标记上绘制的图像
    MarkerBasedARProcessor();// 构造函数
    Mat Process(Mat& Image);// 处理一帧图像
};

Step 3 主体流程

首先我们来看main()函数

int main()
{
   
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值