#include "opcv/CvImageShowModel.h" CvImageShowModel::CvImageShowModel() { //moveToThread(this); mCvImageView = new CvImageViewWidget(); mCvImageView->installEventFilter(this); mCvImageView->resize(200, 200); mCvImageData = std::make_shared(); //m_hRegion = std::make_shared(); } void CvImageShowModel::inputConnectionDeleted(QtNodes::Connection const&) { mCvImageView->showImage(cv::Mat()); mCvImageData = std::make_shared(); PortIndex const outPortIndex = 0; modelValidationState = NodeValidationState::Warning; modelValidationError = QStringLiteral("图片输入未连接!"); Q_EMIT dataUpdated(outPortIndex); } bool CvImageShowModel::RunTask() { PortIndex const outPortIndex = 0; try { //qDebug() << "22show"; //QThread::sleep(3); mCvImageView->showImage(*mCvImageData->CvImage()); modelValidationState = NodeValidationState::Valid; modelValidationError = QString(); } catch (...) { modelValidationState = NodeValidationState::Warning; modelValidationError = QStringLiteral("缺失或运行失败!"); } Q_EMIT dataUpdated(outPortIndex); return true; } bool CvImageShowModel::eventFilter(QObject* watched, QEvent* event) { return false; } unsigned int CvImageShowModel::nPorts(PortType portType) const { unsigned int result = 1; switch (portType) { case PortType::In: result = 1; break; case PortType::Out: result = 1; default: break; } return result; } NodeDataType CvImageShowModel::dataType(PortType portType, PortIndex portIndex) const { switch (portIndex) { case 0: return CvImageData().type(); break; case 1: return CvImageData().type(); break; } return CvImageData().type(); } void CvImageShowModel::setInData(std::shared_ptr data, int portIndex) { if (data == nullptr) return; if (data->type() == mCvImageData->type()) { auto dataPtr = std::dynamic_pointer_cast(data); if (dataPtr->CvImage()->empty()) return; mCvImageData->setCvImage(*dataPtr->CvImage()); } //else if (data->type() == m_hRegion->type()) //{ // auto dataPtr = std::dynamic_pointer_cast(data); // if (!dataPtr->hRegion()->IsInitialized()) // return; // m_hRegion->setHRegion(*dataPtr->hRegion()); // m_hRegion->setSize(dataPtr->getSize()); // HImage tmpImg = m_hRegion->hRegion()->RegionToBin(255, 0, // m_hRegion->getSize().width(), m_hRegion->getSize().height()); // m_hImage->setHImage(tmpImg); //} RunTask(); } std::shared_ptr CvImageShowModel::outData(PortIndex index) { switch (index) { case 0: return std::dynamic_pointer_cast(mCvImageData); break; case 1: return std::dynamic_pointer_cast(mCvImageData); break; } return std::dynamic_pointer_cast(mCvImageData); }