This commit is contained in:
Chenwenxuan
2024-03-06 14:54:30 +08:00
commit edac2715f0
1525 changed files with 809982 additions and 0 deletions

View File

@@ -0,0 +1,333 @@
#include "specificareaswidget.h"
#include "ui_specificareaswidget.h"
#include "deviceproxy.h"
#include "deviceinfo.h"
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include <QMouseEvent>
#include <QPainter>
#include <QPixmap>
#include <QDataStream>
#include <QBuffer>
#include <QTcpServer>
#include <QTcpSocket>
#include <QVector3D>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <dirent.h>
#include <string>
#include <vector>
#include <algorithm>
#include <QtCore/QDebug>
#include <QtGui/QImage>
#include "opencv2/core/core.hpp"
#include "opencv2/opencv.hpp"
#include "rs_settings.h"
#define NUMBER 3
QImage* img=new QImage;
cv::Mat imgcv;//拼接完成的图片
QImage* qimgRecv;//从python返回的img转化为qimage
cv::Mat imgRecv;//从python返回的img
SpecificAreasWidget::SpecificAreasWidget(QWidget *parent) :
QDialog(parent),
ui(new Ui::SpecificAreasWidget)
{
ui->setupUi(this);
this->setMouseTracking(true);
ui->lbImage->setMouseTracking(true);
connect(DEV,SIGNAL(ShowMergeSGL()),this,SLOT(ShowMergeSlots()));
// Sleep(50);
// if (DEV->srcImgs.size() > 0)
// {
// imgcv = DEV->Func_merge(200,500);
// *img = QImage(imgcv.data, imgcv.cols, imgcv.rows, QImage::Format_RGB888);
// //调用完成之后把img显示在窗口上
// if((double)img->width()/(double)ui->lbImage->width() >= (double)img->height()/(double)ui->lbImage->height())
// Mul=(double)img->width()/(double)ui->lbImage->width();
// else
// Mul=(double)img->height()/(double)ui->lbImage->height();
// ui->edLog->append("缩放倍数:" + QString::number(Mul,'f',3));
// *scaledimg=img->scaled(ui->lbImage->width(),ui->lbImage->height(),Qt::KeepAspectRatio);
// *scaledimgInit = scaledimg->copy();
// ui->lbImage->setPixmap(QPixmap::fromImage(*scaledimg));
// }
}
SpecificAreasWidget::~SpecificAreasWidget()
{
delete ui;
}
//显示窗口上的坐标
void SpecificAreasWidget::mouseMoveEvent(QMouseEvent *e)
{
if( e->x() >= ui->lbImage->pos().x()
&& e->y() >= ui->lbImage->pos().y()
&& e->x() <= ui->lbImage->pos().x() + scaledimg->width()
&& e->y() <= ui->lbImage->pos().y() + scaledimg->height() )
{
int x = (e->x()-ui->lbImage->pos().x()) * Mul;
int y = (e->y()-ui->lbImage->pos().y()) * Mul;
QString strX;
QString strY;
strX = QString::number(x,10);
strY = QString::number(y,10);
QString strCoordinate = "坐标: ( " + strX + ", " + strY + " )";
//ui->labCoordinate->setText(strCoordinate);
}
}
////点击绘制坐标点
void SpecificAreasWidget::mousePressEvent(QMouseEvent *e)
{
int lx = ui->lbImage->pos().x();
int ly = ui->lbImage->pos().y();
if( e->x() >= ui->lbImage->pos().x()
&& e->y() >= ui->lbImage->pos().y()
&& e->x() <= ui->lbImage->pos().x() + scaledimg->width()
&& e->y() <= ui->lbImage->pos().y() + scaledimg->height() )
{
int x = (e->x()-ui->lbImage->pos().x()) * Mul;
int y = (e->y()-ui->lbImage->pos().y()) * Mul;
QString strX;
QString strY;
strX = QString::number(x,10);
strY = QString::number(y,10);
QString strCoordinate;
QVector<int> vec;
vec.append(x);
vec.append(y);
if(e->buttons() == Qt::LeftButton)
{
vec.append(1);
strCoordinate = "添加坐标: ( " + strX + ", " + strY + ", 1" + " )";
QPainter painter(scaledimg); // 创建一个QPainter对象用于绘制图形
painter.setRenderHint(QPainter::Antialiasing); // 设置抗锯齿
QPen pen(Qt::red, 2); // 创建画笔对象颜色为黑色线宽为2像素
painter.setPen(pen);
painter.drawLine(e->x()-lx-5, e->y()-ly-5,e->x()-lx+5, e->y()-ly+5);
painter.drawLine(e->x()-lx-5, e->y()-ly+5,e->x()-lx+5, e->y()-ly-5);
ui->lbImage->setPixmap(QPixmap::fromImage(*scaledimg));
}
else if(e->buttons() == Qt::RightButton)
{
vec.append(0);
strCoordinate = "添加坐标: ( " + strX + ", " + strY + ", 0" + " )";
QPainter painter(scaledimg); // 创建一个QPainter对象用于绘制图形
painter.setRenderHint(QPainter::Antialiasing); // 设置抗锯齿
QPen pen(Qt::blue, 2); // 创建画笔对象颜色为黑色线宽为2像素
painter.setPen(pen);
painter.drawLine(e->x()-lx-5, e->y()-ly-5,e->x()-lx+5, e->y()-ly+5);
painter.drawLine(e->x()-lx-5, e->y()-ly+5,e->x()-lx+5, e->y()-ly-5);
ui->lbImage->setPixmap(QPixmap::fromImage(*scaledimg));
}
All.append(vec);
ui->edLog->append(strCoordinate);
}
}
void SpecificAreasWidget::on_pbOk_clicked()
{
DEVICE_INFO->printDeviceSystemInfo("手动加工继续!");
DEV->DataCheckFlag = true;
this->close();
//调用完成之后把img显示在窗口上
// filename = QFileDialog::getOpenFileName();
// if(filename.isEmpty())
// return;
// if(! ( img->load(filename) ) ) //加载图像
// {
// QMessageBox::information(this,
// tr("打开图像失败"),
// tr("打开图像失败!"));
// delete img;
// return;
// }
// if((double)img->width()/(double)ui->lbImage->width() >= (double)img->height()/(double)ui->lbImage->height())
// Mul=(double)img->width()/(double)ui->lbImage->width();
// else
// Mul=(double)img->height()/(double)ui->lbImage->height();
// ui->edLog->append("缩放倍数:" + QString::number(Mul,'f',3));
// *scaledimg=img->scaled(ui->lbImage->width(),ui->lbImage->height(),Qt::KeepAspectRatio);
// *scaledimgInit = scaledimg->copy();
// ui->lbImage->setPixmap(QPixmap::fromImage(*scaledimg));
}
void SpecificAreasWidget::on_pbCancel_clicked()
{
DEVICE_INFO->printDeviceSystemInfo("手动加工取消!");
//emit DEV->MsgLogInSuccess(false);
DEV->DataCheckFlag = false;
this->close();
}
void SpecificAreasWidget::on_rbSrcImg_clicked()
{
if (ui->rbSrcImg->isChecked())
{
//if (DEV->srcImgs[0].data != nullptr)
{
RS_SETTINGS->beginGroup("device/Rposition");
double GlobalPix = RS_SETTINGS->readNumDEntry("/GlobalPix");
int StartPos = RS_SETTINGS->readNumDEntry("/StartPos");
RS_SETTINGS->endGroup();
//imgcv = DEV->Func_merge(StartPos,StartPos+(int)GlobalPix*10);
cv::cvtColor(imgcv, imgcv, cv::COLOR_BGR2RGB);
*img = QImage(imgcv.data, imgcv.cols, imgcv.rows, QImage::Format_RGB888);
//调用完成之后把img显示在窗口上
if((double)img->width()/(double)ui->lbImage->width() >= (double)img->height()/(double)ui->lbImage->height())
Mul=(double)img->width()/(double)ui->lbImage->width();
else
Mul=(double)img->height()/(double)ui->lbImage->height();
ui->edLog->append("缩放倍数:" + QString::number(Mul,'f',3));
*scaledimg=img->scaled(ui->lbImage->width(),ui->lbImage->height(),Qt::KeepAspectRatio);
*scaledimgInit = scaledimg->copy();
ui->lbImage->setPixmap(QPixmap::fromImage(*scaledimg));
}
}
}
void SpecificAreasWidget::on_rbDstImg_clicked()
{
if (ui->rbDstImg->isChecked())
{
if (!imgRecv.empty())
{
const uchar *pSrc = (const uchar*)imgRecv.data;
QImage qimgRecv(pSrc, imgRecv.cols, imgRecv.rows, imgRecv.step, QImage::Format_RGB888);
//调用完成之后把img显示在窗口上
if((double)qimgRecv.width()/(double)ui->lbImage->width() >= (double)qimgRecv.height()/(double)ui->lbImage->height())
Mul=(double)qimgRecv.width()/(double)ui->lbImage->width();
else
Mul=(double)qimgRecv.height()/(double)ui->lbImage->height();
ui->edLog->append("缩放倍数:" + QString::number(Mul,'f',3));
*scaledimg=qimgRecv.scaled(ui->lbImage->width(),ui->lbImage->height(),Qt::KeepAspectRatio);
*scaledimgInit = scaledimg->copy();
ui->lbImage->setPixmap(QPixmap::fromImage(*scaledimg));
}
}
}
void SpecificAreasWidget::ShowMergeSlots()
{
ui->rbDstImg->setChecked(true);
{
if (!imgRecv.empty())
{
const uchar *pSrc = (const uchar*)imgRecv.data;
/***************************************************************
* 修改码1008610010
* 日期:
* 2024.3.1
* 功能:
* 小面识别功能的图片显示bug修改
* 描述:
* Format_Grayscale8改为Format_RGB888
**************************************************************/
QImage qimgRecv(pSrc, imgRecv.cols, imgRecv.rows, imgRecv.step, QImage::Format_RGB888);
//调用完成之后把img显示在窗口上
if((double)qimgRecv.width()/(double)ui->lbImage->width() >= (double)qimgRecv.height()/(double)ui->lbImage->height())
Mul=(double)qimgRecv.width()/(double)ui->lbImage->width();
else
Mul=(double)qimgRecv.height()/(double)ui->lbImage->height();
ui->edLog->append("缩放倍数:" + QString::number(Mul,'f',3));
*scaledimg=qimgRecv.scaled(ui->lbImage->width(),ui->lbImage->height(),Qt::KeepAspectRatio);
*scaledimgInit = scaledimg->copy();
ui->lbImage->setPixmap(QPixmap::fromImage(*scaledimg));
}
}
}
void SpecificAreasWidget::on_pbGetRetImg_clicked()
{
//图片
std::vector<uchar> buf;
cv::imencode(".jpg", imgcv, buf);
QByteArray data(reinterpret_cast<char*>(buf.data()), buf.size());
QDataStream stream(DEV->socket);
stream.setByteOrder(QDataStream::BigEndian);
quint32 size = data.size();
stream << size;
ui->edLog->append("size = " + QString::number(size,10));
DEV->socket->write(data);
ui->edLog->append("finish");
// 定义要发送的坐标点
QVector<QVector3D> points;
for(int i = 0;i < All.size();i++)
{
QVector3D point111(All[i][0],All[i][1],All[i][2]);
points.append(point111);
}
QDataStream out(DEV->socket);
out.setByteOrder(QDataStream::BigEndian);
// 发送坐标点的数量
quint32 num_points = points.size();
out << num_points;
DEV->socket->waitForBytesWritten();
ui->edLog->append(QString::number(num_points,10));
for (const QVector3D& point : points)
{
quint32 x = point.x();
quint32 y = point.y();
quint32 z = point.z();
out << x << y << z;
DEV->socket->waitForBytesWritten();
}
}