#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<iostream>
#include<opencv2\opencv.hpp>
#include<opencv2\wechat_qrcode.hpp>
#include"algoqrcode.h"
using namespace cv;
using namespace std;
int main()
{
Mat image = imread("E:\\X-ray\\QR\\OC_contrib\\qrimage\\(21).jpg", 1);
Mat s = image.clone();
//将image由彩色图像转换成灰度图像
cvtColor(image, image, COLOR_BGR2GRAY);
//再通过阈值函数将其转换为二值图像
threshold(image, image, 160, 255, THRESH_BINARY);//设置阈值为160,最大像素值为255
Mat kernel = Mat::ones(Size(55, 55), CV_8UC1);
morphologyEx(image, image, MORPH_CLOSE, kernel);
Mat kernel2 = Mat::ones(Size(25, 25), CV_8UC1);
morphologyEx(image, image, MORPH_OPEN, kernel2);
vector<vector<Point>> contours;
vector<Vec4i> hierachy;
findContours(image, contours, hierachy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
cout << contours.size() << endl;
vector<Mat> vv;
for (int i = 0; i < contours.size(); i++)
{
int area = contourArea(contours[i]);
if (area < 400) continue;
Rect r = boundingRect(contours[i]);
rectangle(s, r, Scalar(0, 0, 255), 4);
Mat patch = s.clone()(r);
vv.push_back(patch);
//imshow(to_string(i), patch);
waitKey(0);
}
string config_dir = "E:\\x-ray\\qr\\oc_contrib\\qr\\";
AlgoQRCode qrdet;
qrdet.initModel(config_dir);
for (int i = 0; i < vv.size(); i++)
{
Mat m = vv[i];
vector<string> v;
qrdet.detectQRCode(m, v);
cout << v.size() << endl;
if (v.size() != 0)
{
for (string vv : v)
{
cout << vv << endl;
}
}
}
waitKey(0);
return 0;
}