完善了两个相机的展示程序

This commit is contained in:
zhenye 2024-12-18 17:32:40 +08:00
parent 643a663953
commit ebede0bf96
8 changed files with 121 additions and 40 deletions

View File

@ -4,7 +4,7 @@
#include <QTimer> #include <QTimer>
// Debug Options // Debug Options
#define GlobalDebug 1 // 全局是否允许打印Debug信息打印会拖慢处理时间 #define GlobalDebug 0 // 全局是否允许打印Debug信息打印会拖慢处理时间
#define DebugDetection 0 // 注意开启这个编译选项会导致图片存储, 处理时间会很慢 #define DebugDetection 0 // 注意开启这个编译选项会导致图片存储, 处理时间会很慢
#define DebugDetectionTime 0 // 是否打印处理时间 #define DebugDetectionTime 0 // 是否打印处理时间
#define DebugLowerMacCOM 0 // 是否打印和下位机通讯的相关信息 #define DebugLowerMacCOM 0 // 是否打印和下位机通讯的相关信息
@ -148,6 +148,11 @@ MIL_INT ProcessingFunction0(MIL_INT HookType, MIL_ID HookId, void *HookDataPtr)
#endif #endif
MdigGetHookInfo(HookId, M_MODIFIED_BUFFER + M_BUFFER_ID, &ModifiedBufferId0); MdigGetHookInfo(HookId, M_MODIFIED_BUFFER + M_BUFFER_ID, &ModifiedBufferId0);
{
QMutexLocker locker(&gDispPicMutex0);
gDispCurrentPicId0 = ModifiedBufferId0;
}
if(SaveImg_Flag) if(SaveImg_Flag)
{ {
//拷贝存图图像 //拷贝存图图像
@ -247,8 +252,8 @@ MIL_INT ProcessingFunction1(MIL_INT HookType, MIL_ID HookId, void *HookDataPtr)
// Update the current Img MIl id // Update the current Img MIl id
{ {
QMutexLocker locker(&gPicMutex0); QMutexLocker locker(&gDispPicMutex1);
gCurrentPicId0 = ModifiedBufferId0; gDispCurrentPicId1 = ModifiedBufferId1;
} }
if(SaveImg_Flag) if(SaveImg_Flag)

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 15.0.0, 2024-12-18T13:21:37. --> <!-- Written by QtCreator 15.0.0, 2024-12-18T17:01:05. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

View File

@ -1,8 +1,10 @@
// globals.cpp // globals.cpp
#include "globals.h" #include "globals.h"
// 初始化全局互斥锁 // 图片显示0
QMutex gPicMutex0; QMutex gDispPicMutex0;
MIL_ID gDispCurrentPicId0 = 0;
// 初始化全局 MIL_ID // 图片显示1
MIL_ID gCurrentPicId0 = 0; QMutex gDispPicMutex1;
MIL_ID gDispCurrentPicId1 = 0;

View File

@ -5,10 +5,12 @@
#include <MIL.h> #include <MIL.h>
#include <QMutex> #include <QMutex>
// 全局互斥锁,保护 current_pic_id 的访问 // 图片显示0
extern QMutex gPicMutex0; extern QMutex gDispPicMutex0;
extern MIL_ID gDispCurrentPicId0;
// 全局变量,用于存储当前的 MIL_ID // 图片显示1
extern MIL_ID gCurrentPicId0; extern QMutex gDispPicMutex1;
extern MIL_ID gDispCurrentPicId1;
#endif // GLOBALS_H #endif // GLOBALS_H

View File

@ -37,8 +37,10 @@ public:
QLabel *lab_info; QLabel *lab_info;
QPushButton *btn_start; QPushButton *btn_start;
QPushButton *btn_stop; QPushButton *btn_stop;
QLabel *camera_1_img;
QLabel *camera_0_img; QLabel *camera_0_img;
QLabel *camera_1_img;
QLabel *label_2;
QLabel *label_3;
QWidget *tab_3; QWidget *tab_3;
QLabel *label_title_3; QLabel *label_title_3;
QGroupBox *groupBox_4; QGroupBox *groupBox_4;
@ -128,16 +130,23 @@ public:
btn_stop = new QPushButton(tab_2); btn_stop = new QPushButton(tab_2);
btn_stop->setObjectName("btn_stop"); btn_stop->setObjectName("btn_stop");
btn_stop->setGeometry(QRect(20, 190, 101, 41)); btn_stop->setGeometry(QRect(20, 190, 101, 41));
camera_1_img = new QLabel(tab_2);
camera_1_img->setObjectName("camera_1_img");
camera_1_img->setGeometry(QRect(160, 20, 591, 191));
camera_1_img->setStyleSheet(QString::fromUtf8("background-color: rgb(129, 129, 129);"));
camera_0_img = new QLabel(tab_2); camera_0_img = new QLabel(tab_2);
camera_0_img->setObjectName("camera_0_img"); camera_0_img->setObjectName("camera_0_img");
camera_0_img->setGeometry(QRect(160, 240, 591, 191)); camera_0_img->setGeometry(QRect(160, 40, 591, 191));
camera_0_img->setStyleSheet(QString::fromUtf8("background-color: rgb(129, 129, 129);\n" camera_0_img->setStyleSheet(QString::fromUtf8("background-color: rgb(129, 129, 129);\n"
"border: 4px solid black;")); "border: 4px solid black;"));
camera_0_img->setLineWidth(1); camera_1_img = new QLabel(tab_2);
camera_1_img->setObjectName("camera_1_img");
camera_1_img->setGeometry(QRect(160, 290, 591, 191));
camera_1_img->setStyleSheet(QString::fromUtf8("background-color: rgb(129, 129, 129);\n"
"border: 4px solid black;"));
camera_1_img->setLineWidth(1);
label_2 = new QLabel(tab_2);
label_2->setObjectName("label_2");
label_2->setGeometry(QRect(160, 270, 141, 16));
label_3 = new QLabel(tab_2);
label_3->setObjectName("label_3");
label_3->setGeometry(QRect(160, 20, 141, 16));
tabWidget->addTab(tab_2, QString()); tabWidget->addTab(tab_2, QString());
tab_3 = new QWidget(); tab_3 = new QWidget();
tab_3->setObjectName("tab_3"); tab_3->setObjectName("tab_3");
@ -229,8 +238,10 @@ public:
lab_info->setText(QCoreApplication::translate("Widget", "\345\207\206\345\244\207\344\270\255", nullptr)); lab_info->setText(QCoreApplication::translate("Widget", "\345\207\206\345\244\207\344\270\255", nullptr));
btn_start->setText(QCoreApplication::translate("Widget", "\345\274\200\345\247\213\345\210\206\351\200\211", nullptr)); btn_start->setText(QCoreApplication::translate("Widget", "\345\274\200\345\247\213\345\210\206\351\200\211", nullptr));
btn_stop->setText(QCoreApplication::translate("Widget", "\345\201\234\346\255\242\345\210\206\351\200\211", nullptr)); btn_stop->setText(QCoreApplication::translate("Widget", "\345\201\234\346\255\242\345\210\206\351\200\211", nullptr));
camera_1_img->setText(QString());
camera_0_img->setText(QString()); camera_0_img->setText(QString());
camera_1_img->setText(QString());
label_2->setText(QCoreApplication::translate("Widget", "\347\233\270\346\234\2721\357\274\210\351\253\230\344\276\247/\346\260\224\347\275\220\344\276\247\357\274\211", nullptr));
label_3->setText(QCoreApplication::translate("Widget", "\347\233\270\346\234\2720\357\274\210\344\275\216\344\276\247/\345\207\272\351\243\216\345\217\243\344\276\247\357\274\211", nullptr));
tabWidget->setTabText(tabWidget->indexOf(tab_2), QCoreApplication::translate("Widget", "Tab 2", nullptr)); tabWidget->setTabText(tabWidget->indexOf(tab_2), QCoreApplication::translate("Widget", "Tab 2", nullptr));
label_title_3->setText(QCoreApplication::translate("Widget", "\345\217\202\346\225\260\350\256\276\347\275\256\347\225\214\351\235\242", nullptr)); label_title_3->setText(QCoreApplication::translate("Widget", "\345\217\202\346\225\260\350\256\276\347\275\256\347\225\214\351\235\242", nullptr));
groupBox_4->setTitle(QCoreApplication::translate("Widget", "\344\270\213\344\275\215\346\234\272\345\217\202\346\225\260", nullptr)); groupBox_4->setTitle(QCoreApplication::translate("Widget", "\344\270\213\344\275\215\346\234\272\345\217\202\346\225\260", nullptr));

View File

@ -47,22 +47,50 @@ Widget::~Widget()
void Widget::refreshImage() void Widget::refreshImage()
{ {
refreshSingleImage(0);
refreshSingleImage(1);
}
void Widget::refreshSingleImage(int camera_id)
{
// 更新当前的图片0
MIL_ID current_id = 0; MIL_ID current_id = 0;
if (camera_id == 0)
// 获取当前的 MIL_ID
{ {
QMutexLocker locker(&gPicMutex0); {
current_id = gCurrentPicId0; QMutexLocker locker(&gDispPicMutex0);
current_id = gDispCurrentPicId0;
}
if (current_id == 0)
return;
// 获取 QPixmap 并设置到 QLabel
QPixmap pixmap0 = ImageUtils::mat2QPixmap(ImageUtils::mil2Mat(current_id));
if (!pixmap0.isNull())
{
ui->camera_0_img->setPixmap(pixmap0);
}
} }
// 更新当前的图片1
if (current_id == 0) else if (camera_id == 1)
return;
// 获取 QPixmap 并设置到 QLabel
QPixmap pixmap = ImageUtils::mat2QPixmap(ImageUtils::mil2Mat(current_id));
if (!pixmap.isNull())
{ {
ui->camera_0_img->setPixmap(pixmap); {
QMutexLocker locker(&gDispPicMutex0);
current_id = gDispCurrentPicId0;
}
if (current_id == 0)
return;
// 获取 QPixmap 并设置到 QLabel
QPixmap pixmap1 = ImageUtils::mat2QPixmap(ImageUtils::mil2Mat(current_id));
if (!pixmap1.isNull())
{
ui->camera_1_img->setPixmap(pixmap1);
}
}
else
{
qWarning() << "The given Camera ID is wrong!";
} }
} }
@ -80,10 +108,14 @@ void Widget::on_pushButton_2_clicked()
void Widget::on_btn_goto_sort_clicked() void Widget::on_btn_goto_sort_clicked()
{ {
// 获取当前的 MIL_ID // 回复当前的
{ {
QMutexLocker locker(&gPicMutex0); QMutexLocker locker(&gDispPicMutex0);
gCurrentPicId0 = 0; gDispCurrentPicId0 = 0;
}
{
QMutexLocker locker(&gDispPicMutex1);
gDispCurrentPicId1 = 0;
} }
DestoryCamera(); DestoryCamera();
DestoryLowMac(); DestoryLowMac();

View File

@ -26,6 +26,8 @@ public slots:
private slots: private slots:
void refreshSingleImage(int camera_id);
void on_pushButton_clicked(); void on_pushButton_clicked();
void on_pushButton_2_clicked(); void on_pushButton_2_clicked();

View File

@ -300,27 +300,28 @@
<string>停止分选</string> <string>停止分选</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="camera_1_img"> <widget class="QLabel" name="camera_0_img">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>160</x> <x>160</x>
<y>20</y> <y>40</y>
<width>591</width> <width>591</width>
<height>191</height> <height>191</height>
</rect> </rect>
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">background-color: rgb(129, 129, 129);</string> <string notr="true">background-color: rgb(129, 129, 129);
border: 4px solid black;</string>
</property> </property>
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="camera_0_img"> <widget class="QLabel" name="camera_1_img">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>160</x> <x>160</x>
<y>240</y> <y>290</y>
<width>591</width> <width>591</width>
<height>191</height> <height>191</height>
</rect> </rect>
@ -336,6 +337,32 @@ border: 4px solid black;</string>
<string/> <string/>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>160</x>
<y>270</y>
<width>141</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>相机1高侧/气罐侧)</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>160</x>
<y>20</y>
<width>141</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>相机0低侧/出风口侧)</string>
</property>
</widget>
</widget> </widget>
<widget class="QWidget" name="tab_3"> <widget class="QWidget" name="tab_3">
<attribute name="title"> <attribute name="title">