95 lines
1.7 KiB
C++
95 lines
1.7 KiB
C++
#include "opcv/CvImageLoaderModel.h"
|
|
|
|
#include <QDir>
|
|
#include <QEvent>
|
|
#include <QFileDialog>
|
|
|
|
CvImageLoaderModel::CvImageLoaderModel()
|
|
{
|
|
mCvImageView = new CvImageViewWidget();
|
|
mCvImageView->installEventFilter(this);
|
|
mCvImageView->resize(200, 200);
|
|
mCvImageData = std::make_shared<CvImageData>();
|
|
}
|
|
|
|
unsigned int CvImageLoaderModel::nPorts(PortType portType) const
|
|
{
|
|
unsigned int result = 1;
|
|
|
|
switch (portType)
|
|
{
|
|
case PortType::In:
|
|
result = 0;
|
|
break;
|
|
|
|
case PortType::Out:
|
|
result = 1;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
NodeDataType CvImageLoaderModel::dataType(PortType portType, PortIndex portIndex) const
|
|
{
|
|
return CvImageData().type();
|
|
}
|
|
|
|
QJsonObject CvImageLoaderModel::save() const
|
|
{
|
|
|
|
return QJsonObject();
|
|
}
|
|
|
|
void CvImageLoaderModel::restore(QJsonObject const&)
|
|
{
|
|
QJsonObject modelJson = NodeDataModel::save();
|
|
|
|
}
|
|
|
|
void CvImageLoaderModel::loadImage(QString fileName)
|
|
{
|
|
if (fileName == "")
|
|
return;
|
|
|
|
cv::Mat tempImg = cv::imread(fileName.toStdString().c_str());
|
|
mCvImageData->setCvImage(tempImg);
|
|
mCvImageView->showImage(*mCvImageData->CvImage());
|
|
}
|
|
|
|
bool CvImageLoaderModel::eventFilter(QObject* object, QEvent* event)
|
|
{
|
|
if (object == mCvImageView)
|
|
{
|
|
if (event->type() == QEvent::MouseButtonPress)
|
|
{
|
|
imageName = QFileDialog::getOpenFileName(nullptr,
|
|
tr("Open Image"),
|
|
QDir::homePath(),
|
|
tr("Image Files(*.png *.jpg *.jpeg *.bmp)"));
|
|
if (imageName == "")
|
|
{
|
|
return false;
|
|
}
|
|
|
|
loadImage(imageName);
|
|
|
|
Q_EMIT dataUpdated(0);
|
|
|
|
return true;
|
|
}
|
|
else if (event->type() == QEvent::Resize)
|
|
{
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
std::shared_ptr<NodeData> CvImageLoaderModel::outData(PortIndex port)
|
|
{
|
|
return std::dynamic_pointer_cast<CvImageData>(mCvImageData);
|
|
}
|
|
|