#include <iostream>
#include <opencv2/opencv.hpp>
#include <zxing/BarcodeFormat.h>
#include <zxing/DecodeHints.h>
#include <zxing/Reader.h>
#include <zxing/MultiFormatReader.h>
#include <zxing/BinaryBitmap.h>
#include <zxing/HybridBinarizer.h>
#include <zxing/BitMatrix.h>
#include <zxing/Result.h>
using namespace std;
using namespace cv;
using namespace zxing;
int main() {
// Load the image containing the barcode
string imagePath = "barcode.png";
Mat image = imread(imagePath, IMREAD_GRAYSCALE);
if (image.empty()) {
cerr << "Error loading image." << endl;
return 1;
}
// Convert Mat image to zxing::BitMatrix
int width = image.cols;
int height = image.rows;
vector<uchar> imgData(image.data, image.data + (width * height));
Ref<BitMatrix> bitMatrix = Ref<BitMatrix>(new BitMatrix(width, height));
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
uchar pixel = imgData[y * width + x];
bitMatrix->set(x, y, pixel < 128);
}
}
// Create a BinaryBitmap from BitMatrix
Ref<BinaryBitmap> binaryBitmap = Ref<BinaryBitmap>(new BinaryBitmap(Ref<HybridBinarizer>(new HybridBinarizer(bitMatrix))));
// Create a reader and decode the barcode
MultiFormatReader reader;
DecodeHints hints;
hints.setTryHarder(true);
Ref<Result> result = reader.decode(binaryBitmap, hints);
// Output the result
if (result) {
cout << "Barcode text: " << result->getText()->getText() << endl;
} else {
cout << "No barcode found." << endl;
}
return 0;
}