在这里的项目文件的目录是这样的,只有main.cpp是运行的
在这里我进行了进行直接装编译好的opencv的方法直接进行使用
在这里我的编译器是Clion来进行的C++的编译。这里参考的是这篇文章:Windows下Clion免编译配置opencv教程,小白向_clion opencv-优快云博客
这里我使用的opencv的版本是:4.5.5的版本。下载的可以直接从这里下载:
通过百度网盘分享的文件:OpenCV-MinGW-Build-OpenCV-4.5.5-x64...
链接:https://pan.baidu.com/s/1oAyIkfTa8EUAF5fxHYeizA?pwd=0225
提取码:0225
这里还要进行配置环境配置中的目录为 我的压缩包中的OpenCV-MinGW-Build-OpenCV-4.5.5-x64\x64\mingw\bin这个目录。
这里还要给这个编译器进行配置:打开编辑配置进行配置,之后对最近的配置的应用程序进行配置工作目录添加这个:OpenCV-MinGW-Build-OpenCV-4.5.5-x64\x64\mingw\bin(这里的前缀我没有加是放到的文件夹的位置自行补全即可)
这里的C++的main代码是这个:
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
// 定义颜色分割的 HSV 范围
cv::Scalar lower_hsv(103, 65, 115);
cv::Scalar upper_hsv(125, 200, 240);
// 定义标志物类型
enum SIGN_TYPE
{
UNKNOWN = -1,
A = 0,
B = 1,
Left = 2,
Right = 3
};
// 模板存储
std::vector<cv::Mat> templates;
std::vector<cv::Mat> templates_roi;
std::vector<SIGN_TYPE> sign_types = {A, B, Left, Right};
std::vector<std::string> sign_names = {"A", "B", "Left", "Right"};
// A4: 210mm×297mm
std::vector<cv::Point3f> object_points_1 = {
{-0.21 / 2, -0.297 / 2, 0},
{-0.21 / 2, 0.297 / 2, 0},
{0.21 / 2, 0.297 / 2, 0},
{0.21 / 2, -0.297 / 2, 0}}; // 横着的A4纸
std::vector<cv::Point3f> object_points_2 = {
{-0.297 / 2, -0.21 / 2, 0},
{0.297 / 2, -0.21 / 2, 0},
{0.297 / 2, 0.21 / 2, 0},
{-0.297 / 2, 0.21 / 2, 0}}; // 竖着的A4纸
// 相机内参矩阵
cv::Mat cameraMatrix = (cv::Mat_<double>(3, 3) << 229.5, 0, 320, // fx, 0, cx
0, 171.6, 240, // 0, fy, cy
0, 0, 1 // 0, 0, 1
);
// 假设没有畸变
cv::Mat distCoeffs = cv::Mat::zeros(4, 1, CV_64F); // 5-8维
float template_thersold = 0.5;
// 函数:获取模板