zbar 二维码译码算法获取译码后的二维码位置并在QT画出轮廓
1.获取二维码位置坐标,四个点: int main(void) { Mat mat = imread("E:\\qrcodetest.jpg"); zbar::ImageScanner scnner; scnner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1); cvtColor(mat, mat, COLOR_BGR2GRAY); zbar::Image imageZbar(mat.cols, mat.rows, "Y800", (uchar *)mat.data, mat.cols * mat.rows); scnner.scan(imageZbar); SymbolIterator symbol = imageZbar.symbol_begin(); if (imageZbar.symbol_begin() != imageZbar.symbol_end()) { //图中有二维码 SymbolIterator iter = imageZbar.symbol_begin(); //iter->get_location_size(): 二维码矩形有几个点,一般都是4个,也就是二维码一般都是方形的 cout << iter->get_location_size() << endl; for (int i = 0; i < iter->get_location_size();i ++) { //获取第i个点的x cout << iter->get_location_x(i) << endl; //获取第i个点的y cout << iter->get_location_y(i) << endl; } } getc(stdin); return 0; }
2. QT 画轮廓线:
static const QPointF points[4] = {QPointF(30, 40), QPointF(60, 150), QPointF(150, 160), QPointF(220, 100)};
painter.drawPolygon(points, 4);
#include <QWidget>
#include <QPainter>
#include <QPolygon>
class PolygonWidget : public QWidget {
protected:
void paintEvent(QPaintEvent *event) override {
QPainter painter(this);
painter.setBrush(Qt::blue); // 设置填充颜色为蓝色
painter.setPen(Qt::NoPen); // 不绘制边框
QPolygon polygon;
polygon << QPoint(10, 10) << QPoint(100, 10) << QPoint(50, 90); // 定义多边形的顶点
painter.drawPolygon(polygon); // 绘制多边形
}
};