实现效果
#include "mainwindow.h" #include "ui_mainwindow.h" #include#include #include #include #include using namespace std; using namespace zbar; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); cam = NULL; timer = new QTimer(this); imag = new QImage(); connect(timer, SIGNAL(timeout()), this, SLOT(readFrame())); connect(timer, SIGNAL(timeout()), this, SLOT(scancode())); connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_cliked())); connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(on_pushButton_2_clicked())); } MainWindow::~MainWindow() { delete ui; cvReleaseCapture(&cam); }
void MainWindow::on_pushButton_clicked()
{
cam = cvCreateCameraCapture(0);//打开摄像头,从摄像头中获取视频
timer->start(33);
}
void MainWindow::on_pushButton_2_clicked()
{
timer->stop();
// 停止读取数据。
cvReleaseCapture(&cam);
}
void MainWindow::readFrame()
{
frame = cvQueryFrame(cam);
cvCvtColor(frame, frame, CV_BGR2RGB);
QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(image));
}
void MainWindow::scancode()
{
frame = cvQueryFrame(cam);
IplImage *grayFrame = 0;
//创建zbar图像扫描器
ImageScanner scanner;
//配置zbar图片扫描器
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
clock_t start, finish;
//clock_t为CPU时钟计时单元数
start = clock();
if (frame)
{
if (!grayFrame)
grayFrame = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);
cvCvtColor(frame, grayFrame, CV_BGR2GRAY);
//创建zbar图像
Image image(frame->width, frame->height, "Y800", grayFrame->imageData, frame->width * frame->height);
//扫描图像,识别条码,获取个数
int symbolCount = scanner.scan(image);
//获取第一个条码
Image::SymbolIterator symbol = image.symbol_begin();
if (image.symbol_begin() == image.symbol_end())
{
cout << "查询条码失败,请检查图片!" << endl;
}
while (symbolCount--)
{
cout << "条码类型:'" << symbol->get_type_name() << "'" << endl;
cout << "条码内容:'" << symbol->get_data() << "'" << endl;
string str_data1 = symbol->get_type_name()+symbol->get_data();
QString qstr1 = QString::fromStdString(str_data1) ;
ui->plainTextEdit->setPlainText(qstr1);
//获取定位点个数
int pointCount = symbol->get_location_size();
for (int i = 0; i < pointCount; i++)
// cout << '(' << symbol->get_location_x(i) << ',' << symbol->get_location_y(i) << ")" << endl;
++symbol;
}
}
finish = clock();
cout <lineEdit->setText(str);
//获取系统时间戳
time_t timeReal;
time(&timeReal);
timeReal = timeReal + 8*3600;
tm* t = gmtime(&timeReal);
cout << timeReal << endl;
printf("%d-%02d-%02d %02d:%02d:%02dn", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
}



