#include "camerawidget.h" #include #include #include #include #include "lightsource.h" CameraWidget::CameraWidget(QWidget *parent) : QFrame(parent) , ui(new Ui::CameraWidget) { ui->setupUi(this); initWidget(); } CameraWidget::~CameraWidget() { delete ui; delete myImage; if(readCameraImageThread->isRunning()) { readCameraImageThread->requestInterruption(); readCameraImageThread->wait(); delete readCameraImageThread; } if(myCamera) { myCamera->Close(); delete myCamera; myCamera = nullptr; } } void CameraWidget::initWidget() { //设置窗口属性 this->setWindowTitle("相机"); //this->setWindowFlags(Qt::WindowCloseButtonHint|Qt::Dialog); //this->setWindowModality(Qt::ApplicationModal); //this->setFixedSize(this->width(),this->height()); // 保证QLabel 可缩放 ui->lbShow->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored); //初始化变量 isOpenDevice = false; //生成保存图片文件夹 QString imagePath = QDir::currentPath()+"/myImage/"; QDir dstDir(imagePath); if(!dstDir.exists()) { if(!dstDir.mkdir(imagePath)) { qDebug()<<"创建Image文件夹失败"<lbShow->pixmap() == nullptr) { QMessageBox::warning(this,"警告","保存失败,未采集到图像"); return; } QString savePath = QDir::currentPath()+"/myImage/"; QString imagePath = QDir::currentPath()+"/myImage/"; QString curDate = QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss.zzz"); QString saveName = savePath + curDate + "." + format; const QPixmap *curImage = ui->lbShow->pixmap(); qDebug() <<"saveName:"<save(saveName)) { qDebug()<<"保存成功!"; } else { qDebug()<<"保存失败!"; } } // 显示单张图像 void CameraWidget::display(const Mat* imagePtr) { qDebug()<<"single display ok"<channels()>1) { *qMyImage = QImage((const unsigned char*)(imagePtr->data),imagePtr->cols,imagePtr->rows,QImage::Format_RGB888); } else { *qMyImage = QImage((const unsigned char*)(imagePtr->data),imagePtr->cols,imagePtr->rows,QImage::Format_Indexed8); } *qMyImage = (*qMyImage).scaled(ui->lbShow->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation); //显示图像 ui->lbShow->setPixmap(QPixmap::fromImage(*qMyImage)); delete qMyImage; } void CameraWidget::slotDisplay() { qDebug()<<"continuous display ok"; QImage* qMyImage = new QImage(); if(myImage->channels()>1) { *qMyImage = QImage((const unsigned char*)(myImage->data),myImage->cols,myImage->rows,QImage::Format_RGB888); } else { *qMyImage = QImage((const unsigned char*)(myImage->data),myImage->cols,myImage->rows,QImage::Format_Indexed8); } *qMyImage = (*qMyImage).scaled(ui->lbShow->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation); //显示图像 ui->lbShow->setPixmap(QPixmap::fromImage(*qMyImage)); delete qMyImage; } void CameraWidget::slotDisplayImage(QImage myImage) { myImage = myImage.scaled(ui->lbShow->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation); ui->lbShow->setPixmap(QPixmap::fromImage(myImage)); } void CameraWidget::on_pbFind_clicked() { ui->cbDevices->clear(); memset(&deviceList,0,sizeof (MV_CC_DEVICE_INFO_LIST)); // 枚举子网内所有设备 int nRet = CMvCamera::EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE,&deviceList); if(MV_OK != nRet) { return; } for(unsigned int i=0; inTLayerType == MV_USB_DEVICE) { strModelName = (char*)pDeviceInfo->SpecialInfo.stUsb3VInfo.chModelName; } else if(pDeviceInfo->nTLayerType == MV_GIGE_DEVICE) { strModelName = (char*)pDeviceInfo->SpecialInfo.stGigEInfo.chModelName; } else { QMessageBox::warning(this,"警告","未知设备枚举"); return; } qDebug()<<"strModelName: "<cbDevices->addItem(strModelName); } } void CameraWidget::on_pbOpen_clicked() { if(isOpenDevice) { return; } QString deviceModel = ui->cbDevices->currentText(); if(deviceModel == "") { //QMessageBox::warning(this,"警告","请选择设备"); return; } myCamera = CAMERAFIND; if(nullptr==myCamera) { return; } int nIndex = ui->cbDevices->currentIndex(); //打开设备 int nRet = myCamera->Open(deviceList.pDeviceInfo[nIndex]); qDebug()<<"Connect: "<SetEnumValue("TriggerMode",1); qDebug()<<"TriggerSource:"<SetEnumValue("TriggerSource",7); qDebug()<<"SetExposureTime:"<SetFloatValue("ExposureTime",myCamera->ExposureTime); qDebug()<<"StartCamera:"<StartGrabbing(); readCameraImageThread->getCameraPtr(myCamera); readCameraImageThread->getImagePtr(myImage); isOpenDevice = true; ui->lbShow->setText("打开设备成功!"); } void CameraWidget::on_pbClose_clicked() { if(myCamera) { on_pbStop_clicked(); myCamera->Close(); delete myCamera; myCamera = nullptr; isOpenDevice = false; } } void CameraWidget::on_pbSingle_clicked() { if(!isOpenDevice) { QMessageBox::warning(this,"警告","采集失败,请打开设备!"); return; } LIGHTSOURCEFIND->LightOn(4); Sleep(20); Mat *image =new Mat(); //qDebug()<<"single SoftTriger:"<CommandExecute("TriggerSoftware"); // qDebug()<<"single ReadBuffer:"<ReadBuffer(*image); myCamera->GetImage(*image,false); display(image); LIGHTSOURCEFIND->LightOff(4); delete image; } void CameraWidget::on_pbStart_clicked() { if(!isOpenDevice) { QMessageBox::warning(this,"警告","采集失败,请打开设备!"); return; } LIGHTSOURCEFIND->LightOn(4); Sleep(20); if(!readCameraImageThread->isRunning()) { readCameraImageThread->start(); } } void CameraWidget::on_pbStop_clicked() { if(readCameraImageThread->isRunning()) { readCameraImageThread->requestInterruption(); readCameraImageThread->wait(); LIGHTSOURCEFIND->LightOff(1); } } void CameraWidget::on_pbSaveBmp_clicked() { saveImage("bmp"); } //void CameraWidget::on_pbSavePng_clicked() //{ // saveImage("png"); //} void CameraWidget::on_pbEnableOrDisableCrossHairLine_clicked() { if("开十字线"==ui->pbEnableOrDisableCrossHairLine->text()) { readCameraImageThread->setEnableCrossHairLine(true); ui->pbEnableOrDisableCrossHairLine->setText("关十字线"); } else { readCameraImageThread->setEnableCrossHairLine(false); ui->pbEnableOrDisableCrossHairLine->setText("开十字线"); } } void CameraWidget::on_pbSavePNG_clicked() { saveImage("png"); }