mainny ui improcements

This commit is contained in:
2021-06-17 18:39:47 +02:00
parent 50777fe056
commit 86ec50575b
25 changed files with 819 additions and 264 deletions

View File

@ -1,21 +1,60 @@
#include "cvimageviewer.h"
#include <QPicture>
#include <QDebug>
#include <QMouseEvent>
#include <QFileDialog>
#include <opencv2/imgcodecs.hpp>
CvImageViewer::CvImageViewer(QWidget *parent, size_t lastId) :
QWidget(parent),
lastId_(lastId)
lastId_(lastId),
saveAction_("Save Image", nullptr)
{
connect(&saveAction_, &QAction::triggered, this, &CvImageViewer::saveImage);
qimage_.load(":/images/noimage.png");
imageContextMenu_.addAction(&saveAction_);
}
CvImageViewer::~CvImageViewer()
{
}
void CvImageViewer::saveImage()
{
QString fileName;
if(origImage_.type() == CV_8UC3 || origImage_.type() == CV_8SC3 || origImage_.type() == CV_8UC1 || origImage_.type() == CV_8SC1)
{
fileName = QFileDialog::getSaveFileName(this, "Save Image", "./", "*.mat *.png" );
}
else
{
fileName = QFileDialog::getSaveFileName(this, "Save Image", "./", "*.mat" );
}
if(!fileName.isEmpty())
{
QStringList tokens = fileName.split('.');
if(tokens.back() != "mat" && tokens.back() != "png")
fileName.append(".mat");
tokens = fileName.split('.');
if(tokens.back() == "png")
{
imwrite(fileName.toStdString(), origImage_);
}
else
{
cv::FileStorage matf(fileName.toStdString(), cv::FileStorage::WRITE);
matf<<"image"<<origImage_;
matf.release();
}
}
}
void CvImageViewer::setImage(Camera::Image img)
{
image_ = img.mat;
origImage_=img.mat;
qDebug()<<"viwer got"<<image_.rows<<'x'<<image_.cols<<" type "<<image_.type()<<"image from camera"<<img.cameraId;
if(image_.type() == CV_8UC3 || image_.type() == CV_8SC3)
{
qimage_ = QImage(image_.data, image_.cols, image_.rows, image_.step, QImage::Format_RGB888);
@ -37,19 +76,41 @@ void CvImageViewer::setImage(Camera::Image img)
update();
}
void CvImageViewer::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::RightButton)
{
saveAction_.setEnabled(origImage_.data);
imageContextMenu_.popup(event->globalPos());
}
else if(origImage_.data && event->x() > imgrect_.x() && event->y() > imgrect_.y() && event->x() < imgrect_.x()+imgrect_.width() && event->y() < imgrect_.y()+imgrect_.height())
{
int x = (event->x()-imgrect_.x())/static_cast<double>(imgrect_.width())*origImage_.cols;
int y = (event->y()-imgrect_.y())/static_cast<double>(imgrect_.height())*origImage_.rows;
qDebug()<<x<<y;
if(origImage_.type() == CV_32FC1)
{
if(x >= 0 && y >= 0 && x <= origImage_.cols && y < origImage_.rows)
sigValue(x, y, origImage_.at<float>(y,x));
}
else
{
sigValue(x, y, 0);
}
}
QWidget::mousePressEvent(event);
}
void CvImageViewer::paintEvent(QPaintEvent* event)
{
Q_UNUSED(event)
QPainter painter(this);
if(!fixedOnWidth_)
{
double ratio = qimage_.size().width() / qimage_.size().height();
painter.drawImage(QRect((rect().width()-rect().height())/2, rect().y(), rect().height()*ratio, rect().height()), qimage_);
}
double ratio = qimage_.size().height() / (double)qimage_.size().width();
if(rect().width()*ratio <= rect().height())
imgrect_.setRect(0, (rect().height()-rect().width()*ratio)/2, rect().width(), rect().width()*ratio);
else
{
double ratio = qimage_.size().height() / qimage_.size().width();
painter.drawImage(QRect(rect().x(), (rect().height()-rect().width())/2, rect().width(), rect().width()*ratio), qimage_);
}
imgrect_.setRect((rect().width()-rect().height()/ratio)/2, 0, rect().height()/ratio, rect().height());
painter.drawImage(imgrect_, qimage_);
}