init
This commit is contained in:
333
device/ui/specificareaswidget.cpp
Normal file
333
device/ui/specificareaswidget.cpp
Normal 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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user