#include "CigaretteSingle.h" #include #include #include SyncQueue >* g_save_queue; SyncQueue* g_image_queue; ASyncQueue* g_result_queue; CigaretteSingle::CigaretteSingle(QWidget *parent) : QMainWindow(parent) , ui(new Ui::CigaretteSingleClass()) { ui->setupUi(this); ui->centralWidget->setStyleSheet("background-color : #1F2026;"); QFile qrcfile; //设置登录窗口和添加窗口的样式 qrcfile.setFileName(":/CigaretteSingle/darkblack.css"); qrcfile.open(QIODevice::ReadOnly); QString strQss = qrcfile.readAll(); this->setStyleSheet(strQss); g_save_queue = new SyncQueue >(Queue_Size); g_save_queue->name = "save queue"; g_image_queue = new SyncQueue(Queue_Size); g_image_queue->name = format("image"); g_result_queue = new ASyncQueue(Queue_Size); g_result_queue->name = format("result"); saveThread.init(g_save_queue); saveThread.start_work(); g_ts_start = QDateTime::currentDateTime(); //系统启动时间 //每秒任务定时器 m_pTimer = new QTimer(this); connect(m_pTimer, SIGNAL(timeout()), this, SLOT(event_per_second())); m_pTimer->start(1000); connect(ui->textBrowser, SIGNAL(cursorPositionChanged()), this, SLOT(autoScroll())); m_alg_ptr = new Alg; /*int hik_cnt = 0; hik_cnt = HIKCamera::Enumerate(); if (hik_cnt) { HIKCamera::HikController = HIKCamera::InitHIKController(0); HikControllerPtr = HIKCamera::HikController; HikControllerPtr->p_image_queue = g_image_queue; HikControllerPtr->p_result_queue = g_result_queue; HikControllerPtr->OpenCamera(); }*/ work_thread.p_image_queue = g_image_queue; work_thread.p_result_queue = g_result_queue; work_thread.p_save_queue = g_save_queue; work_thread.m_alg_ptr = m_alg_ptr; work_thread.init(); connect(&work_thread, SIGNAL(display_image(cv::Mat)), this, SLOT(DisplayImage(cv::Mat))); work_thread.start_work(); } CigaretteSingle::~CigaretteSingle() { delete g_save_queue; delete g_image_queue; delete g_result_queue; delete ui; } void CigaretteSingle::DisplayImage(cv::Mat m) { // //将图像大小缩放为显示窗口大小 cv::Size display_size = cv::Size(ui->image_label->width(), ui->image_label->height()); cv::resize(m, m, display_size); QImage tempImage = cvMatToQImage(m); ui->image_label->setPixmap(QPixmap::fromImage(tempImage)); } //定时任务,每秒运行一次 void CigaretteSingle::event_per_second() { static int weight_per_minute_mat[10] = {0}; static INT16 last_weight = 0; QDateTime ts_start = QDateTime::currentDateTime(); QDateTime local(ts_start); QString localTime = local.toString("yyyy-MM-dd hh:mm:ss"); //ui->label_cur_time_val->setText(localTime); qint64 intervalTime = g_ts_start.secsTo(ts_start); int days = (intervalTime) / (24 * 3600); int hours = (intervalTime) % (24 * 3600) / 3600; int minutes = (intervalTime) % 3600 / 60; int second = (intervalTime) % 60; QString run_stat = SecondToQStrTime(intervalTime); ui->label_run_time_val->setText(run_stat); } void CigaretteSingle::on_pushButton_mtest_released() { QString srcDirPath = QFileDialog::getExistingDirectory(this, "choose src Directory", "./"); if (srcDirPath.isEmpty()) { return; } vector files; qDebug() << "srcDirPath=" << srcDirPath; srcDirPath += "/"; //获取该路径下的所有文件 getFiles(srcDirPath.toStdString() + "*.jpg", files); for (int i = 0; i < files.size(); i++) { //输入图像 std::cout << "open file------ " << files[i] << std::endl; cv::Mat imagein = cv::imread(srcDirPath.toStdString() + files[i], cv::IMREAD_COLOR); if (imagein.data) { cv::cvtColor(imagein, imagein, cv::COLOR_BGR2GRAY); g_image_queue->put(imagein.clone()); Sleep(500); } } } //cv::Mat image; //cv::Mat imageCopy; //绘制矩形框时用来拷贝原图的图像 bool leftButtonDownFlag = false; //左键单击后视频暂停播放的标志位 cv::Point originalPoint; //矩形框起点 cv::Point processPoint; //矩形框终点 std::vector RectVet; void onMouse(int event, int x, int y, int flags, void* ustc); //鼠标回调函数 void CigaretteSingle::on_pushButton_selectregion_released() { QString srcDirPath = QString::fromStdString(SelectDirIFD()); Alg m_alg; vector files; qDebug() << "srcDirPath=" << srcDirPath; srcDirPath += "/"; //获取该路径下的所有文件 getFiles(srcDirPath.toStdString() + "*.jpg", files); if (files.size() == 0) { QMessageBox::StandardButton result = QMessageBox::information(NULL, QStringLiteral("提示"), QStringLiteral("没有找到图片")); return; } cv::namedWindow("Image"); cv::setMouseCallback("Image", onMouse); for (int index = 0; index < files.size(); index++) { //输入图像 //std::cout << "open file------ " << files[index] << std::endl; cv::Mat imagein = cv::imread(srcDirPath.toStdString() + files[index], cv::IMREAD_COLOR); cv::cvtColor(imagein, imagein, cv::COLOR_BGR2GRAY); if (!imagein.data) { break; } //1. 起点等于终点 //2. 左键按下且未抬起 if ((originalPoint != processPoint) && (leftButtonDownFlag == true)) { rectangle(imagein, originalPoint, processPoint, cv::Scalar(255, 0, 0), 2); } if (RectVet.size()) { for (int i = 0; i < RectVet.size(); i++) { cv::Mat input = imagein(RectVet[i]).clone(); cv::Mat output; m_alg.process_bool(input, output); cv::putText(imagein, to_string (i), RectVet[i].tl(),CV_FONT_HERSHEY_DUPLEX, 1, cv::Scalar(0, 0, 255)); rectangle(imagein, RectVet[i], cv::Scalar(0, 0, 255), 2); } } imshow("Image", imagein); //cv::cvtColor(imagein, imagein, cv::COLOR_BGR2GRAY); //g_image_queue->put(imagein.clone()); //Sleep(500); int k = cv::waitKeyEx(1); if (k == 27)break;//ESC键 else if ((k == 3014656) && (RectVet.size() != 0))RectVet.pop_back();//DELETE键 if (index == files.size() - 1)index = 0; QCoreApplication::processEvents(); } cv::imshow("Image", cv::Mat::zeros(cv::Size(1, 1), CV_8UC1)); cv::destroyWindow("Image"); } //鼠标回调函数 void onMouse(int event, int x, int y, int flags, void* ustc) { if (event == CV_EVENT_LBUTTONDOWN) { leftButtonDownFlag = true; //标志位 originalPoint = cv::Point(x, y); //设置左键按下点的矩形起点 processPoint = originalPoint; } if (event == CV_EVENT_MOUSEMOVE && leftButtonDownFlag) { processPoint = cv::Point(x, y); } if (event == CV_EVENT_LBUTTONUP) { leftButtonDownFlag = false; RectVet.push_back(cv::Rect(originalPoint, processPoint)); //cv::Mat rectImage = image(cv::Rect(originalPoint, processPoint)); //子图像显示 //cv::imshow("Sub Image", rectImage); } }