引入必要的OpenCV和C++库
首先,程序包含了OpenCV库和C++标准库的头文件,这些库提供了处理图像所需的各种功能。
#include <opencv2/core.hpp> // OpenCV核心功能#include <opencv2/imgcodecs.hpp> // 图像编解码#include <opencv2/highgui.hpp> // GUI#include <opencv2/imgproc.hpp> // 图像处理#include <iostream> // 输入输出流#include <set> // 集合#include <opencv2/opencv.hpp> // OpenCV主要功能#include <opencv2/imgproc/types_c.h> // 旧版的图像处理
使用namespace简化代码中频繁使用的命名空间引用。
using namespace cv;
using namespace std;
定义结构体和全局变量
定义一个结构体index_用于存储相关联的轮廓索引,以及一个全局变量vin存储这些结构体的向量,用于后续处理。
RNG rng(12345);
struct index_ {
int a1; int a2; int a3;};
index_ in;
vector<index_> vin;
主函数和图像预处理
加载图像,调整大小至500x500像素,以便于处理。对图像进行对比度和亮度调节,目的是增强图像中的二维码部分,使其在后续步骤中更容易被识别。
String srcImagePath("D:\\Users\\Desktop\\opencv二维码定位图案检测(c++)\\8.jpg");Mat srcImage = imread(srcImagePath, IMREAD_COLOR);resize(srcImage, srcImage, Size(500, 500));
Mat contrastImage = Mat::zeros(srcImage.size(), srcImage.type());double alpha = 1.8; // 对比度控制int beta = -30; // 亮度控制for (int y = 0; y < srcImage.rows; y++) { for (int x