VisionMaster 二次开发获取图像,本地保存,COM组件显示

1.在VM中新建一个方案,只有一个 图像源

2.Qt的Pro文件添加库,只要这一个就行了

INCLUDEPATH+='D:/HIKVISION/VM4.2.0/VisionMaster4.2.0/Development/V4.x/Includes'
LIBS+=-L'D:/HIKVISION/VM4.2.0/VisionMaster4.2.0/Development/V4.x/Libraries/win64\C' -liMVS-6000PlatformSDK

3.头文件

建议放在预编译头文件里,这些文件编译时间有点长,暂时用到这么多

#include<IVmSolution.h>
#include<IVmProcedure.h>
#include<VMException.h>
#include<IVmImageSource.h>
#include<IVmDynamicIoDefine.h>

4.代码中加载方案,然后获取图像源结果,并在Qt中使用qaxWidget调用VM的组件显示图像,

widget->dynamicCall("GetObjectPointer()");

IVmSolution *solution = LoadSolution("G:/Temp/VMQTTest/solution.sol", "");

ImageSourceModuleTool *sorceTool = (ImageSourceModuleTool *)(*solution)["流程1.图像源1"];

这几行代码的先后顺序有坑

#include"pch.h"
#include<QAxWidget>
#include<QApplication>

using namespace VisionMasterSDK;
using namespace VisionMasterSDK::VmSolution;
using namespace VisionMasterSDK::VmProcedure;
using namespace VisionMasterSDK::ImageSourceModule;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //初始化COM组件,VmRenderControlWinform
    QAxWidget *widget = widget = new QAxWidget;
    widget->setControl("{313241a6-62f9-464b-bede-f514827e2f4b}");

    //这里有坑,在方案之前调用没问题,如果在后面调用就要在获取图像源之后,具体可测试
    widget->dynamicCall("GetObjectPointer()");

    //获取解决方案
    IVmSolution *solution = LoadSolution("G:/Temp/VMQTTest/solution.sol", "");

    if(solution)
    {
        //运行一次方案
        solution->Run();

        //得到图像源模块
        ImageSourceModuleTool *sorceTool = (ImageSourceModuleTool *)(*solution)["流程1.图像源1"];
        if(sorceTool)
        {
            //获取图像源结果
            ImageSourceResults *result = sorceTool->GetResult();
            if(result)
            {
                //得到图像信息
                ImageBaseData baseData = result->GetImageData();
                qlonglong pData = (qlonglong)(&baseData);
                widget->dynamicCall("SetImageSourceData(qlonglong)", pData);

                //这里用VM的组件显示图像
                widget->show();

            }
        }

        DestroySolutionInstance(solution);
    }
    return a.exec();
}

5.QAXWidget使用的UUID在注册表能查到,使用Qt中UI框架更容易找到

注册表里也能找到

Windows自带的工具oleview.exe也能找到

6.运行效果

7.还可以使用QImage将图像保存在本地

#include"pch.h"
#include<QUrl>
#include<QTime>
#include<QImage>
#include<QApplication>
#include<QDesktopServices>

using namespace VisionMasterSDK;
using namespace VisionMasterSDK::VmSolution;
using namespace VisionMasterSDK::VmProcedure;
using namespace VisionMasterSDK::ImageSourceModule;


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //获取解决方案
    IVmSolution *solution = LoadSolution("G:/Temp/VMQTTest/solution.sol", "");

    if(solution)
    {
        //运行一次方案
        solution->Run();

        //得到图像源模块
        ImageSourceModuleTool *sorceTool = (ImageSourceModuleTool *)(*solution)["流程1.图像源1"];
        if(sorceTool)
        {
            //获取图像源结果
            ImageSourceResults *result = sorceTool->GetResult();
            if(result)
            {
                //得到图像信息
                ImageBaseData baseData = result->GetImageData();


                MvdPixelFormat format = baseData.Pixelformat; //像素格式,这里已知MVD_PIXEL_MONO_08
                int width = baseData.Width;                 //图像宽度
                int height = baseData.Height;               //图像高度
                uchar *data = (uchar *)baseData.ImageData;  //图像数据

                QImage image(data, width, height, QImage::Format_Grayscale8);

                //如果图像有效,保存并使用默认软件显示
                if(!image.isNull())
                {
                    QString path = "../" + QTime::currentTime().toString("hhmmss") + ".jpg";
                    if(image.save(path))
                    {
                        QDesktopServices::openUrl(QUrl::fromLocalFile(path));
                    }
                }

            }
        }

        DestroySolutionInstance(solution);
    }
    return a.exec();
}

8.上面的代码保存图像成功后使用默认软件打开图像,效果如下

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 08:44:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 08:44:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 08:44:02       58 阅读
  4. Python语言-面向对象

    2024-07-17 08:44:02       69 阅读

热门阅读

  1. 【DevOps文化与实践】DevOps的基本原则和实施策略

    2024-07-17 08:44:02       21 阅读
  2. 基于形状匹配原始版放出来(给有用的人参考2)

    2024-07-17 08:44:02       22 阅读
  3. 华为应用市场静默安装

    2024-07-17 08:44:02       18 阅读
  4. 使用Micronaut进行无服务器应用开发

    2024-07-17 08:44:02       24 阅读
  5. GCC链接静态库和动态库详解

    2024-07-17 08:44:02       25 阅读
  6. 数据库SQL Server时间函数Datetime

    2024-07-17 08:44:02       25 阅读
  7. Redis⑥ —— 缓存设计

    2024-07-17 08:44:02       22 阅读
  8. 记录vue3中h函数的各种使用方式

    2024-07-17 08:44:02       27 阅读