ref:
https://blog.csdn.net/qq_35299223/article/details/103754599?utm_medium=distribute.pc_relevant_download.none-task-blog-2~default~searchFromBaidu~default-10.test_version_3&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-2~default~searchFromBaidu~default-10.test_version_
軟件框架
ui界面框架
.pro文件
#------------------------------------------------- # # Project created by QtCreator 2019-12-20T09:41:39 # #------------------------------------------------- QT += core gui QT+=charts greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport TARGET = RailMeasurement TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which as been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ mainwindow.cpp \ qcustomplot.cpp \ camerawindow.cpp \ mat2qtformatmethod.cpp \ cgxbitmap.cpp \ convertstring.cpp \ drawwidget.cpp HEADERS += \ mainwindow.h \ qcustomplot.h \ camerawindow.h \ mat2qtformatmethod.h \ cgxbitmap.h \ convertstring.h \ drawwidget.h FORMS += \ mainwindow.ui \ camerawindow.ui # opencv環境,添加了imgproc,core,highui庫 win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../cvpack/package/opencv/build/x64/vc14/lib/ -lopencv_imgproc2413 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../cvpack/package/opencv/build/x64/vc14/lib/ -lopencv_imgproc2413d else:unix: LIBS += -L$$PWD/../../cvpack/package/opencv/build/x64/vc14/lib/ -lopencv_imgproc2413 INCLUDEPATH += $$PWD/../../cvpack/package/opencv/build/include DEPENDPATH += $$PWD/../../cvpack/package/opencv/build/include win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../cvpack/package/opencv/build/x64/vc14/lib/ -lopencv_core2413 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../cvpack/package/opencv/build/x64/vc14/lib/ -lopencv_core2413d else:unix: LIBS += -L$$PWD/../../cvpack/package/opencv/build/x64/vc14/lib/ -lopencv_core2413 INCLUDEPATH += $$PWD/../../cvpack/package/opencv/build/include DEPENDPATH += $$PWD/../../cvpack/package/opencv/build/include win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../cvpack/package/opencv/build/x64/vc14/lib/ -lopencv_highgui2413 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../cvpack/package/opencv/build/x64/vc14/lib/ -lopencv_highgui2413d else:unix: LIBS += -L$$PWD/../../cvpack/package/opencv/build/x64/vc14/lib/ -lopencv_highgui2413 INCLUDEPATH += $$PWD/../../cvpack/package/opencv/build/include DEPENDPATH += $$PWD/../../cvpack/package/opencv/build/include # 大恆sdk環境,添加了C++庫和包含路徑,沒有添加c程序的庫 unix|win32: LIBS += -L$$PWD/'../../CameraDemo/C++ SDK/lib/x64/' -lGxIAPICPPEx INCLUDEPATH += $$PWD/'../../CameraDemo/C++ SDK/lib/x64' DEPENDPATH += $$PWD/'../../CameraDemo/C++ SDK/lib/x64' INCLUDEPATH += $$PWD/'../../CameraDemo/C++ SDK/inc' DEPENDPATH += $$PWD/'../../CameraDemo/C++ SDK/inc' CONFIG +=C++11
camerawindow.h
1 #ifndef CAMERAWINDOW_H 2 #define CAMERAWINDOW_H 3 #include "GalaxyIncludes.h" 4 #include <QDebug> 5 #include <opencv2/core.hpp> 6 #include <opencv2/highgui.hpp> 7 #include <opencv2/imgproc.hpp> 8 #include "mat2qtformatmethod.h" 9 #include <QPixmap> 10 #include <QImage> 11 #include <QLabel> 12 #include <QMessageBox> 13 #include <string> 14 #include "cgxbitmap.h" 15 #include "convertstring.h" 16 #include <time.h> 17 #include <QPainter> 18 #include "drawwidget.h" 19 20 21 struct CameraWindowGeoParams{ 22 int WidgetWidth; 23 int WidgetHeight; 24 int LabelWidth; 25 int LabelHeight; 26 int LineeditWidth; 27 int LineeditHeight; 28 int ButtonWidth; 29 int ButtonHeight; 30 }; 31 struct MyUserParam{ 32 cv::Mat CurImgMat; 33 QLabel* LabelShowImgPtr; 34 }; 35 36 37 38 #include <QWidget> 39 40 namespace Ui { 41 class CameraWindow; 42 struct CameraWindowGeoParams; 43 //class CSampleCaptureEventHandler; 44 } 45 46 class CameraWindow : public QWidget 47 { 48 Q_OBJECT 49 50 private: 51 //回調采集事件類 52 class CSampleCaptureEventHandler : public ICaptureEventHandler 53 { 54 public: 55 56 void DoOnImageCaptured(CImageDataPointer& objImageDataPointer, void* pUserParam) 57 { 58 59 if (objImageDataPointer->GetStatus() == GX_FRAME_STATUS_SUCCESS) 60 { 61 CameraWindow* CamUiPtr=(CameraWindow*)pUserParam; 62 //以下為連續采集部分的顯示 63 void* pRaw8Buffer = NULL; 64 pRaw8Buffer = objImageDataPointer->ConvertToRaw8(GX_BIT_0_7); 65 std::memcpy(CamUiPtr->CurImgMat.data, pRaw8Buffer, (objImageDataPointer->GetHeight())*(objImageDataPointer->GetWidth())); 66 //cv::flip(CamUiPtr->CurImgMat, CamUiPtr->CurImgMat, 0);//大恆的圖像要進行翻轉,但是此處似乎不需要翻轉 67 68 //調用自定義繪圖函數進行繪制實時采集圖像 69 CamUiPtr->ShowCurImgInLabel(CamUiPtr->LabelShowCurImg,CamUiPtr->CurImgMat); 70 71 //重新調整圖像大小以適應窗口,並且此處進行了數據更新,這樣才能使用update()函數 72 //使用drawimage進行繪圖的代碼 73 //先得到一張完整的qimage,然后根據窗口進行修改qimage的大小,最后再進行更新。更行時需要對窗口進行提升,使用自定義窗口。 74 //使用update進行畫圖有更好的連續性效果 75 //CamUiPtr->CurImgQimg=CV2QTFORMAT::cvMatToQImage(CamUiPtr->CurImgMat); 76 //CamUiPtr->pDrawWidget->ReSizeImg(CamUiPtr->CurImgQimg); 77 //CamUiPtr->pDrawWidget->update(); 78 79 //單幀采集 80 if(CamUiPtr->m_bCheckSaveBmp==true){ 81 MakeMyDirectory(CamUiPtr->strFilePath);//創建文件夾 82 std::string PathAndName=CamUiPtr->strFilePath+"\\"+CamUiPtr->strFileName; 83 CamUiPtr->m_pBitmap->SaveBmp(objImageDataPointer,PathAndName);//保存單幀圖像 84 CamUiPtr->m_bCheckSaveBmp=false; 85 86 //通過讀取的方式畫出單幀圖像 87 QString LoadImgName=QString::fromStdString(PathAndName); 88 CamUiPtr->SingleImgPixMap.load(LoadImgName,nullptr,Qt::AutoColor); 89 CamUiPtr->LabelSingleImg->setPixmap(CamUiPtr->SingleImgPixMap); 90 91 //僅僅在激發采集的時候是有意義的 92 CamUiPtr->TimeTakePhoto=clock(); 93 qDebug()<<(double)(CamUiPtr->TimeTakePhoto-CamUiPtr->TimePushButton); 94 CamUiPtr->TimePushButton=0; 95 CamUiPtr->TimeTakePhoto=0; 96 } 97 } 98 } 99 }; 100 101 102 public: 103 explicit CameraWindow(QWidget *parent = 0); 104 ~CameraWindow(); 105 106 void CamWinParamsSet(int _WidgetW, int _WidgetH, int _SmallPartW, int _SmallPartH); 107 108 private slots: 109 void on_pushButton_ListDevice_clicked(); 110 111 void on_pushButton_OpenCam_clicked(); 112 113 void on_pushButton_CloseCam_clicked(); 114 115 void on_pushButton_StartGrab_clicked(); 116 117 void on_pushButton_StopGrab_clicked(); 118 119 void on_pushButton_GetImg_clicked(); 120 121 void on_pushButton_ParamsSet_clicked(); 122 123 private: 124 Ui::CameraWindow *ui; 125 CameraWindowGeoParams CwParas; 126 //相機庫 127 GxIAPICPP::gxdeviceinfo_vector vectorDeviceInfo;//枚舉設備結果 128 CGXDevicePointer ObjDevicePtr;//當前界面操作的相機指針 129 CGXStreamPointer ObjStreamPtr;//流采集指針 130 CGXFeatureControlPointer ObjFeatureControlPtr;//遠端設備控制器 131 ICaptureEventHandler* pCaptureEventHandler;//注冊回調事件指針 132 133 //Opencv參數 134 cv::Mat CurImgMat;//實時窗口的Mat 135 void AllocateRoomForMatCurImgPtr();//為實時采集窗口指針分配空間 136 137 //這里使用string,然后使用自定義函數進行轉換,放棄了MFC的CString類 138 std::string strFilePath;//保存路徑 139 std::string strFileName;//文件名稱 140 141 // 保存圖像為BMP格式 142 CGXBitmap* m_pBitmap;// 保存圖像指針 143 bool m_bCheckSaveBmp;// 是否保存圖片 144 int ImgWidth;//記錄圖片的寬度 145 int ImgHeight;//記錄圖片的高度 146 147 //展示窗口指針 148 QLabel* LabelShowCurImg; 149 QLabel* LabelSingleImg; 150 QPixmap SingleImgPixMap; 151 QPixmap CurImgPixMap;//畫一個當前的圖 152 DrawWidget* pDrawWidget;//提升窗口指針,使用drawqimage顯示實時圖像 153 154 //使用Painter事件來繪圖drawQimg 155 QImage CurImgQimg; 156 QSize LableSize; 157 158 //計時函數 159 clock_t TimePushButton; 160 clock_t TimeTakePhoto; 161 double DelayTime;//用於后期設定延時時間 162 163 //窗口幾何參數設計 164 void GeoSetWidgetCurInput(int _x, int _y, int _width, int _height);//設置實時采集框幾何尺寸 165 void GeoSetWidgetSampleImg(int _x, int _y, int _width, int _height);//設置單幀采集幾何尺寸 166 void GeoSetFrameParamsSet(int _x, int _y, int _width, int _height, int _dx, int _dy);//設置參數框幾何尺寸 167 void GeoSetFrameCamOperate();//設置操作框幾何尺寸 168 void GeoSetFrameWinInfo();//設置抬頭框幾何尺寸 169 170 //繪制實時采集圖像成比例 171 void ShowCurImgInLabel(QLabel* ptrLabelToShow,cv::Mat& CVMat); 172 }; 173 174 #endif // CAMERAWINDOW_H
cgxbitmap.h
1 #ifndef CGXBITMAP_H 2 #define CGXBITMAP_H 3 4 //------------------------------------------------------------------------ 5 /* 6 \file GXBitmap.h 7 \brief 此類主要用於圖像的顯示和存儲,圖像顯示和存儲可以自適應黑白彩色相機, 8 圖像存儲可以存儲為Bmp、Raw,對圖像顯示和存儲進行了聲明 9 */ 10 //------------------------------------------------------------------------ 11 #include "GalaxyIncludes.h" 12 #include "convertstring.h" 13 class CGXBitmap 14 { 15 public: 16 //構造函數 17 CGXBitmap(CGXDevicePointer& objCGXDevicePointer); 18 19 //析構函數 20 ~CGXBitmap(void); 21 22 //顯示圖像 23 void Show(CImageDataPointer& objCImageDataPointer); 24 25 //顯示圖像及幀率 26 void Show(CImageDataPointer& objCImageDataPointer,char* strDeviceSNFPS); 27 28 //圖像處理后並顯示圖像 29 void ShowImageProcess(CImageProcessConfigPointer& objCfg,CImageDataPointer& objCImageDataPointer); 30 31 // 存儲Bmp圖像 32 void SaveBmp(CImageDataPointer& objCImageDataPointer,const std::string& strFilePath); 33 34 // 存儲Raw圖像 35 void SaveRaw(CImageDataPointer& objCImageDataPointer,const std::string& strFilePath); 36 37 //通過GX_PIXEL_FORMAT_ENTRY獲取最優Bit位 38 GX_VALID_BIT_LIST GetBestValudBit(GX_PIXEL_FORMAT_ENTRY emPixelFormatEntry); 39 private: 40 //判斷PixelFormat是否為8位 41 bool __IsPixelFormat8(GX_PIXEL_FORMAT_ENTRY emPixelFormatEntry); 42 43 //為彩色相機圖像顯示准備資源 44 void __ColorPrepareForShowImg(); 45 46 //為黑白相機圖像顯示准備資源 47 void __MonoPrepareForShowImg(); 48 49 //判斷是否兼容 50 bool __IsCompatible(BITMAPINFO *pBmpInfo, uint64_t nWidth, uint64_t nHeight); 51 52 //更新Bitmap的信息 53 void __UpdateBitmap(CImageDataPointer& objCImageDataPointer); 54 55 //將m_pBufferRGB中圖像顯示到界面 56 void __DrawImg(BYTE* pBuffer); 57 58 //將m_pBufferRGB中圖像和幀率顯示到界面 59 void __DrawImg(BYTE* pBuffer, char* strDeviceSNFPS); 60 61 //計算寬度所占的字節數 62 int64_t __GetStride(int64_t nWidth, bool bIsColor); 63 64 65 private: 66 //CameraWindow* pCamw; //<顯示圖像窗口(控件)指針 67 bool m_bIsColor ; //<是否支持彩色相機 68 int64_t m_nImageHeight; //<原始圖像高 69 int64_t m_nImageWidth; //<原始圖像寬 70 BITMAPINFO *m_pBmpInfo; //<BITMAPINFO 結構指針,顯示圖像時使用 71 char m_chBmpBuf[2048]; //<BIMTAPINFO 存儲緩沖區,m_pBmpInfo即指向此緩沖區 72 //這里的這個mfc繪圖句柄刪去 73 //HDC m_hDC; //<繪制圖像DC句柄 74 BYTE *m_pImageBuffer; //<保存翻轉后的圖像用於顯示 75 private: 76 CGXBitmap& operator=(const CGXBitmap&); 77 CGXBitmap(const CGXBitmap&); 78 }; 79 80 #endif // CGXBITMAP_H
.......
qcustomplot.cpp
文件下載
鏈接:https://pan.baidu.com/s/1RqvkmACFslQxbHzkkihV_g
提取碼:o09o