ZBar识别二维码与条形码(基于Opencv图像处理)

    xiaoxiao2025-06-18  7

    // ZBar_test.cpp : 定义控制台应用程序的入口点。

    #include "stdafx.h" #include "stdafx.h" #include "include\zbar.h" #include "opencv2/opencv.hpp" #include "opencv2/core.hpp" #include "highgui.h" #include <iostream> using namespace std; using namespace zbar; using namespace cv; string ZbarDecoder(Mat img) {     cv::namedWindow("Image", cv::WINDOW_AUTOSIZE);     cv::imshow("Image", img);     string result;     ImageScanner scanner;     const void *raw = (&img)->data;     // configure the reader     scanner.set_config(ZBAR_QRCODE, ZBAR_CFG_ENABLE, 1);     // wrap image data     Image image(img.cols, img.rows, "Y800", raw, img.cols * img.rows);     // scan the image for barcodes     int n = scanner.scan(image);     // extract results     Image::SymbolIterator symbol = image.symbol_begin();     if (image.symbol_begin() == image.symbol_end())     {         cout << "Check Image Please" << endl;     }     for (; symbol != image.symbol_end(); ++symbol)     {         cout << "Code Type:" << endl << symbol->get_type_name() << endl << endl;         cout << "Code Data:" << endl << symbol->get_data() << endl << endl;     }     image.set_data(NULL, 0);     return result; } string GetQRInBinImg(Mat binImg) {     string result = ZbarDecoder(binImg);     if (result.empty())     {         Mat openImg;         Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));         morphologyEx(binImg, openImg, MORPH_OPEN, element);         result = ZbarDecoder(openImg);     }     return result; } string GetQR(Mat img) {     Mat binImg;     double thre = threshold(img, binImg, 0, 255, cv::THRESH_OTSU);     string result;     while (result.empty() && thre<255)     {         threshold(img, binImg, thre, 255, cv::THRESH_BINARY);         result = GetQRInBinImg(binImg);         thre += 20;     }     return result; } int main(int argc, char*argv[]) {     Mat src = imread("barcode.png");     cv::namedWindow("Source Image", cv::WINDOW_AUTOSIZE);

        if (!src.data)     {         cout << "image null" << endl;         return 0;     }     cv::imshow("Source Image", src);     cv::cvtColor(src, src, CV_RGB2GRAY);     string re = GetQR(src);     cout << re << endl;     cv::waitKey();     return 0; }

    (1)配置opencv环境

    (2)下载ZBar库文件

    (3)图像处理

     

    完整工程下载地址:

    https://download.csdn.net/download/qq_33628827/11206116

     

     

    最新回复(0)