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.上面的代码保存图像成功后使用默认软件打开图像,效果如下

GitHub 加速计划 / vi / vision
15.85 K
6.89 K
下载
pytorch/vision: 一个基于 PyTorch 的计算机视觉库,提供了各种计算机视觉算法和工具,适合用于实现计算机视觉应用程序。
最近提交(Master分支:3 个月前 )
518ee93d 7 天前
7d077f13 8 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐