不同工业相机的sdk不同,可以到相应的官网下载,我使用的是大华相机
文中提到的例程的Camera和src的代码在文尾(有兴趣可以参考)

下载:

官方下载地址:http://download.huaraytech.com/pub/sdk/
我使用的是2.2.5的Linux的x86的版本



点击下载

安装:

将下载的压缩包中.run文件提取出来,增加可执行权限,然后运行即可


安装位置:/opt/DahuaTech/MVviewer

测试:

运行启动脚本:/opt/DahuaTech/MVviewer/bin/run.sh
成功打开MVviewer

QT使用大华:

新建一个QT工程

导入OpenCV的头文件和库:

pro文件中输入下列代码

INCLUDEPATH +=/usr/local/include/ \/usr/local/include/opencv4/ \/usr/local/include/opencv4/opencv2
LIBS +=/usr/local/lib/lib*

添加大华头文件和动态库:

将大华目录下的头文件复制到工程文件夹下

导入QT:



pro文件中输入下列代码

INCLUDEPATH +=./include \LIBS += -L/opt/DahuaTech/MVviewer/lib/ -lMVSDK
LIBS += -L/opt/DahuaTech/MVviewer/lib/ -lImageConvert
LIBS += -L/opt/DahuaTech/MVviewer/lib/ -lVideoRender
LIBS += -L/opt/DahuaTech/MVviewer/lib/GenICam/bin/Linux64_x64/ -lGCBase_gcc421_v3_0 -lGenApi_gcc421_v3_0 -lLog_gcc421_v3_0
LIBS += -L/opt/DahuaTech/MVviewer/lib/GenICam/bin/Linux64_x64/ -llog4cpp_gcc421_v3_0 -lNodeMapData_gcc421_v3_0 -lXmlParser_gcc421_v3_0
LIBS += -L/opt/DahuaTech/MVviewer/lib/GenICam/bin/Linux64_x64/ -lMathParser_gcc421_v3_0

大华动态库:


添加动态库文件的一般方法:

添加动态库,如libMVSDK.so文件
LIBS+=-L/opt/DahuaTech/MVviewer/lib -lMVSDK
//注意:最前面加上大写字母L。将文件名中的lib替换成-l

添加测试代码:

将例程下的env_test中Camera和src复制到工程文件夹下


将其导入Qt

修改主函数:

#include <iostream>
#include "Camera/video.h"
#include<opencv2/opencv.hpp>
using namespace Dahua::GenICam;
using namespace Dahua::Infra;using namespace std;
using namespace cv;
int main()
{// 创建工业相机的实例Video v;if (!v.videoCheck()){printf("videoCheck failed!\n");return 0;}if (!v.videoOpen()){printf("videoOpen failed!\n");return 0;}//设置增益Video::ETrigType type = Video::ETrigType::trigContinous; //改为连续拉流v.CameraChangeTrig(type);                                //默认为软触发if (!v.videoStart()){printf("videoStart failed!\n");return 0;}Mat src;while(1){if(v.getFrame(src)){imshow("img",src);}else{printf("getFrame failed!\n");break;}if(waitKey(1)=='q'){break;}cout << "Hello World!" << endl;return 0;
}}

插入大华相机,运行,显示设备信息即成功

完成

例程的Camera和src的代码

文件结构


video.h

#ifndef VIDEO_H
#define VIDEO_H#include <math.h>
#include "GenICam/System.h"
#include "Media/VideoRender.h"
#include "Media/ImageConvert.h"
#include <iostream>
#include "GenICam/Camera.h"
#include "GenICam/GigE/GigECamera.h"
#include "GenICam/GigE/GigEInterface.h"
#include "Infra/PrintLog.h"
#include "Memory/SharedPtr.h"
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>using namespace Dahua::GenICam;
using namespace Dahua::Infra;
using namespace Dahua::Memory;
using namespace std;
using namespace cv;static uint32_t gFormatTransferTbl[] ={// Mono FormatgvspPixelMono1p,gvspPixelMono8,gvspPixelMono10,gvspPixelMono10Packed,gvspPixelMono12,gvspPixelMono12Packed,// Bayer FormatgvspPixelBayRG8,gvspPixelBayGB8,gvspPixelBayBG8,gvspPixelBayRG10,gvspPixelBayGB10,gvspPixelBayBG10,gvspPixelBayRG12,gvspPixelBayGB12,gvspPixelBayBG12,gvspPixelBayRG10Packed,gvspPixelBayGB10Packed,gvspPixelBayBG10Packed,gvspPixelBayRG12Packed,gvspPixelBayGB12Packed,gvspPixelBayBG12Packed,gvspPixelBayRG16,gvspPixelBayGB16,gvspPixelBayBG16,gvspPixelBayRG10p,gvspPixelBayRG12p,gvspPixelMono1c,// RGB FormatgvspPixelRGB8,gvspPixelBGR8,// YVR FormatgvspPixelYUV411_8_UYYVYY,gvspPixelYUV422_8_UYVY,gvspPixelYUV422_8,gvspPixelYUV8_UYV,
};
#define gFormatTransferTblLen sizeof(gFormatTransferTbl) / sizeof(gFormatTransferTbl[0])class Video
{public:Video() {}~Video(){videoStopStream(); //断流videoClose();   //析构断开与相机的链接}//枚举触发方式enum ETrigType{trigContinous = 0, //连续拉流trigSoftware = 1,  //软件触发trigLine = 2,      //外部触发};bool videoCheck();                                          //搜索相机bool videoOpen();                                         //初始化相机void CameraChangeTrig(ETrigType trigType = trigSoftware); //设置触发模式,一般为软触发void ExecuteSoftTrig();                                     //执行一次软触发bool videoStart();                                         //创建流对象bool getFrame(Mat &img);                                  //获取一帧图片bool convertToRGB24(Mat &img);                             //转换为opencv可以识别的格式void videoStopStream();                                   //断开拉流void videoClose();                                        //断开相机void startGrabbing();                                   //void SetExposeTime(double exp);                           //设置曝光void SetAdjustPlus(double adj);                           //设置增益void setBufferSize(int nSize);void setBalanceRatio(double dRedBalanceRatio, double dGreenBalanceRatio, double dBlueBalanceRatio);void setResolution(int height = 720, int width = 1280); //设置分辨率void setROI(int64_t nX, int64_t nY, int64_t nWidth, int64_t nHeight);void setBinning();bool loadSetting(int mode);void setFrameRate(double rate = 210);                    //设置帧率ICameraPtr m_pCamera;               //相机对象private:TVector<ICameraPtr> m_vCameraPtrList; //相机列表IStreamSourcePtr m_pStreamSource;  //流文件};class FrameBuffer
{private:uint8_t *Buffer_;int Width_;int Height_;int PaddingX_;int PaddingY_;int DataSize_;int PixelFormat_;uint64_t TimeStamp_;uint64_t BlockId_;public:FrameBuffer(Dahua::GenICam::CFrame const &frame){if (frame.getImageSize() > 0){if (frame.getImagePixelFormat() == Dahua::GenICam::gvspPixelMono8){Buffer_ = new (std::nothrow) uint8_t[frame.getImageSize()];}else{Buffer_ = new (std::nothrow) uint8_t[frame.getImageWidth() * frame.getImageHeight() * 3];}if (Buffer_){Width_ = frame.getImageWidth();Height_ = frame.getImageHeight();PaddingX_ = frame.getImagePadddingX();PaddingY_ = frame.getImagePadddingY();DataSize_ = frame.getImageSize();PixelFormat_ = frame.getImagePixelFormat();BlockId_ = frame.getBlockId();}}}~FrameBuffer(){if (Buffer_ != NULL){delete[] Buffer_;Buffer_ = NULL;}}bool Valid(){if (NULL != Buffer_){return true;}else{return false;}}int Width(){return Width_;}int Height(){return Height_;}int PaddingX(){return PaddingX_;}int PaddingY(){return PaddingY_;}int DataSize(){return DataSize_;}uint64_t PixelFormat(){return PixelFormat_;}uint64_t TimeStamp(){return TimeStamp_;}void setWidth(uint32_t iWidth){Width_ = iWidth;}void setPaddingX(uint32_t iPaddingX){PaddingX_ = iPaddingX;}uint64_t BlockId(){return BlockId_;}void setPaddingY(uint32_t iPaddingX){PaddingY_ = iPaddingX;}void setHeight(uint32_t iHeight){Height_ = iHeight;}void setDataSize(int dataSize){DataSize_ = dataSize;}void setPixelFormat(uint32_t pixelFormat){PixelFormat_ = pixelFormat;}void setTimeStamp(uint64_t timeStamp){TimeStamp_ = timeStamp;}uint8_t *bufPtr(){return Buffer_;}
};#endif

video.cpp

#include "Camera/video.h"void Video::setBufferSize(int nSize){bool bRet;m_pStreamSource = CSystem::getInstance().createStreamSource(m_pCamera);if (NULL == m_pStreamSource){printf("create a SourceStream failed!\n");return;}m_pStreamSource->setBufferCount(nSize);
//  bRet = intNode.setValue(width);
//  if (false == bRet)
//  {//      printf("set width fail.\n");
//      return;
//  }// intNode = sptrImageFormatControl
//  bRet = intNode.setValue(height);
//  if (false == bRet)
//  {//      printf("set height fail.\n");
//      return;
//  }
}bool Video::loadSetting(int mode)
{CSystem &sysobj = CSystem::getInstance();IUserSetControlPtr iSetPtr;iSetPtr = sysobj.createUserSetControl(m_pCamera);CEnumNode nodeUserSelect(m_pCamera, "UserSetSelector");if (mode == 0){if (!nodeUserSelect.setValueBySymbol("UserSet1")){cout << "set UserSetSelector failed!" << endl;}}else if (mode == 1){if (!nodeUserSelect.setValueBySymbol("UserSet2")){cout << "set UserSetSelector failed!" << endl;}}CCmdNode nodeUserSetLoad(m_pCamera, "UserSetLoad");if (!nodeUserSetLoad.execute()){cout << "set UserSetLoad failed!" << endl;}
}bool Video::videoCheck()
{CSystem &systemObj = CSystem::getInstance();bool bRet = systemObj.discovery(m_vCameraPtrList);if (false == bRet){printf("discovery fail.\n");exit(-1);return false;}// 打印相机基本信息(key, 制造商信息, 型号, 序列号)for (int i = 0; i < m_vCameraPtrList.size(); i++){ICameraPtr cameraSptr = m_vCameraPtrList[i];printf("Camera[%d] Info :\n", i);printf("    key           = [%s]\n", cameraSptr->getKey());printf("    vendor name   = [%s]\n", cameraSptr->getVendorName());printf("    model         = [%s]\n", cameraSptr->getModelName());printf("    serial number = [%s]\n", cameraSptr->getSerialNumber());}if (m_vCameraPtrList.size() < 1){printf("no camera.\n");return false;//    msgBoxWarn(tr("Device Disconnected."));}else{//默认设置列表中的第一个相机为当前相机,其他操作比如打开、关闭、修改曝光都是针对这个相机。m_pCamera = m_vCameraPtrList[0];}return true;
}bool Video::videoOpen()
{if (NULL == m_pCamera){printf("connect camera fail. No camera.\n");exit(-1);return false;}if (true == m_pCamera->isConnected()){printf("camera is already connected.\n");exit(-1);return false;}if (false == m_pCamera->connect()){printf("connect camera fail.\n");exit(-1);return false;}return true;
}void Video::videoClose()
{if (NULL == m_pCamera){printf("disconnect camera fail. No camera.\n");exit(-1);return;}if (false == m_pCamera->isConnected()){printf("camera is already disconnected.\n");exit(-1);return;}if (false == m_pCamera->disConnect()){printf("disconnect camera fail.\n");}
}bool Video::videoStart()
{if (m_pStreamSource != NULL){return true;}if (NULL == m_pCamera){printf("start camera fail. No camera.\n");exit(-1);return false;}m_pStreamSource = CSystem::getInstance().createStreamSource(m_pCamera); //创建流的对象if (NULL == m_pStreamSource){printf("Create stream source failed.");exit(-1);return false;}return true;
}void Video::startGrabbing()
{m_pStreamSource->setBufferCount(1);m_pStreamSource->startGrabbing();
}void Video::CameraChangeTrig(ETrigType trigType)
{if (NULL == m_pCamera){printf("Change Trig fail. No camera or camera is not connected.\n");exit(-1);return;}if (trigContinous == trigType){//设置触发模式CEnumNode nodeTriggerMode(m_pCamera, "TriggerMode");if (false == nodeTriggerMode.isValid()){printf("get TriggerMode node fail.\n");return;}if (false == nodeTriggerMode.setValueBySymbol("Off")){printf("set TriggerMode value = Off fail.\n");return;}}else if (trigSoftware == trigType){//设置触发源为软触发CEnumNode nodeTriggerSource(m_pCamera, "TriggerSource");if (false == nodeTriggerSource.isValid()){printf("get TriggerSource node fail.\n");return;}if (false == nodeTriggerSource.setValueBySymbol("Software")){printf("set TriggerSource value = Software fail.\n");return;}//设置触发器CEnumNode nodeTriggerSelector(m_pCamera, "TriggerSelector");if (false == nodeTriggerSelector.isValid()){printf("get TriggerSelector node fail.\n");return;}if (false == nodeTriggerSelector.setValueBySymbol("FrameStart")){printf("set TriggerSelector value = FrameStart fail.\n");return;}//设置触发模式CEnumNode nodeTriggerMode(m_pCamera, "TriggerMode");if (false == nodeTriggerMode.isValid()){printf("get TriggerMode node fail.\n");return;}if (false == nodeTriggerMode.setValueBySymbol("On")){printf("set TriggerMode value = On fail.\n");return;}}else if (trigLine == trigType){//设置触发源为Line1触发CEnumNode nodeTriggerSource(m_pCamera, "TriggerSource");if (false == nodeTriggerSource.isValid()){printf("get TriggerSource node fail.\n");return;}if (false == nodeTriggerSource.setValueBySymbol("Line1")){printf("set TriggerSource value = Line1 fail.\n");return;}//设置触发器CEnumNode nodeTriggerSelector(m_pCamera, "TriggerSelector");if (false == nodeTriggerSelector.isValid()){printf("get TriggerSelector node fail.\n");return;}if (false == nodeTriggerSelector.setValueBySymbol("FrameStart")){printf("set TriggerSelector value = FrameStart fail.\n");return;}//设置触发模式CEnumNode nodeTriggerMode(m_pCamera, "TriggerMode");if (false == nodeTriggerMode.isValid()){printf("get TriggerMode node fail.\n");return;}if (false == nodeTriggerMode.setValueBySymbol("On")){printf("set TriggerMode value = On fail.\n");return;}// 设置外触发为上升沿(下降沿为FallingEdge)CEnumNode nodeTriggerActivation(m_pCamera, "TriggerActivation");if (false == nodeTriggerActivation.isValid()){printf("get TriggerActivation node fail.\n");return;}if (false == nodeTriggerActivation.setValueBySymbol("RisingEdge")){printf("set TriggerActivation value = RisingEdge fail.\n");return;}}
}void Video::ExecuteSoftTrig()
{if (NULL == m_pCamera){printf("Set GainRaw fail. No camera or camera is not connected.\n");return;}CCmdNode nodeTriggerSoftware(m_pCamera, "TriggerSoftware");if (false == nodeTriggerSoftware.isValid()){printf("get TriggerSoftware node fail.\n");return;}if (false == nodeTriggerSoftware.execute()){printf("set TriggerSoftware fail.\n");return;}// printf("ExecuteSoftTrig success.\n");
}void Video::videoStopStream()
{if (m_pStreamSource == NULL){printf("stopGrabbing succefully!\n");return;}if (!m_pStreamSource->stopGrabbing()){printf("stopGrabbing  fail.\n");}
}bool Video::getFrame(Mat &img)
{CFrame frame, frameClone;bool isSuccess = m_pStreamSource->getFrame(frame, 300/*500*/);if (!isSuccess){printf("getFrame  fail.\n");m_pStreamSource->stopGrabbing();m_pCamera->disConnect();exit(0);return false;}//判断帧的有效性bool isValid = frame.valid();if (!isValid){printf("frame is invalid!\n");return false;}frameClone = frame.clone();TSharedPtr<FrameBuffer> PtrFrameBuffer(new FrameBuffer(frameClone));if (!PtrFrameBuffer){printf("create PtrFrameBuffer failed!\n");return false;}uint8_t *pSrcData = new (std::nothrow) uint8_t[frameClone.getImageSize()];if (pSrcData){memcpy(pSrcData, frameClone.getImage(), frameClone.getImageSize());}else{printf("new pSrcData failed!\n");return false;}int dstDataSize = 0;IMGCNV_SOpenParam openParam;openParam.width = PtrFrameBuffer->Width();openParam.height = PtrFrameBuffer->Height();openParam.paddingX = PtrFrameBuffer->PaddingX();openParam.paddingY = PtrFrameBuffer->PaddingY();openParam.dataSize = PtrFrameBuffer->DataSize();openParam.pixelForamt = PtrFrameBuffer->PixelFormat();IMGCNV_EErr status = IMGCNV_ConvertToBGR24(pSrcData, &openParam, PtrFrameBuffer->bufPtr(), &dstDataSize);if (IMGCNV_SUCCESS != status){delete[] pSrcData;return false;}delete[] pSrcData;//将读进来的帧数据转化为opencv中的Mat格式操作Size size;size.height = PtrFrameBuffer->Height();size.width = PtrFrameBuffer->Width();img = Mat(size, CV_8UC3, PtrFrameBuffer->bufPtr()).clone();
//    PtrFrameBuffer.reset();frameClone.reset();return true;
}void Video::setBalanceRatio(double dRedBalanceRatio, double dGreenBalanceRatio, double dBlueBalanceRatio)
{bool bRet;IAnalogControlPtr sptrAnalogControl = CSystem::getInstance().createAnalogControl(m_pCamera);if (NULL == sptrAnalogControl){return ;}/* 关闭自动白平衡 */CEnumNode enumNode = sptrAnalogControl->balanceWhiteAuto();if (false == enumNode.isReadable()){printf("balanceRatio not support.\n");return ;}bRet = enumNode.setValueBySymbol("Off");if (false == bRet){printf("set balanceWhiteAuto Off fail.\n");return ;}enumNode = sptrAnalogControl->balanceRatioSelector();bRet = enumNode.setValueBySymbol("Red");if (false == bRet){printf("set red balanceRatioSelector fail.\n");return ;}CDoubleNode doubleNode = sptrAnalogControl->balanceRatio();bRet = doubleNode.setValue(dRedBalanceRatio);if (false == bRet){printf("set red balanceRatio fail.\n");return ;}enumNode = sptrAnalogControl->balanceRatioSelector();bRet = enumNode.setValueBySymbol("Green");if (false == bRet){printf("set green balanceRatioSelector fail.\n");return ;}doubleNode = sptrAnalogControl->balanceRatio();bRet = doubleNode.setValue(dGreenBalanceRatio);if (false == bRet){printf("set green balanceRatio fail.\n");return ;}enumNode = sptrAnalogControl->balanceRatioSelector();bRet = enumNode.setValueBySymbol("Blue");if (false == bRet){printf("set blue balanceRatioSelector fail.\n");return ;}doubleNode = sptrAnalogControl->balanceRatio();bRet = doubleNode.setValue(dBlueBalanceRatio);if (false == bRet){printf("set blue balanceRatio fail.\n");return ;}
}void Video::SetExposeTime(double exp)
{bool bRet;IAcquisitionControlPtr sptrAcquisitionControl = CSystem::getInstance().createAcquisitionControl(m_pCamera);if (NULL == sptrAcquisitionControl){printf("create a IAcquisitionControlPtr failed!\n");return;}CEnumNode eNode = sptrAcquisitionControl->exposureAuto();uint64 getValue;if (!eNode.getValue(getValue)){printf("get value of type is failed!\n");return;}if (getValue)//如果开启了自动曝光模式,则关闭{bRet = eNode.setValueBySymbol("Off");if (!bRet){printf("close autoExposure failed!\n");return;}}CDoubleNode dNode = sptrAcquisitionControl->exposureTime();bRet = dNode.setValue(exp);if (!bRet){printf("set exposure failed!\n");return;}}void Video::SetAdjustPlus(double adj)
{if (NULL == m_pCamera){printf("Set GainRaw fail. No camera or camera is not connected.\n");return;}CDoubleNode nodeGainRaw(m_pCamera, "GainRaw");if (false == nodeGainRaw.isValid()){printf("get GainRaw node fail.\n");return;}if (false == nodeGainRaw.isAvailable()){printf("GainRaw is not available.\n");return;}if (false == nodeGainRaw.setValue(adj)){printf("set GainRaw value = %f fail.\n", adj);return;}
}void Video::setResolution(int height, int width)
{bool bRet;IImageFormatControlPtr sptrImageFormatControl = CSystem::getInstance().createImageFormatControl(m_pCamera);if (NULL == sptrImageFormatControl){printf("create a IImageFormatControlPtr failed!\n");return;}CIntNode intNode = sptrImageFormatControl->height();bRet = intNode.setValue(width);if (false == bRet){printf("set width fail.\n");return;}intNode = sptrImageFormatControl->height();bRet = intNode.setValue(height);if (false == bRet){printf("set height fail.\n");return;}
}void Video::setROI(int64_t nX, int64_t nY, int64_t nWidth, int64_t nHeight)
{bool bRet;CIntNode nodeWidth(m_pCamera, "Width");bRet = nodeWidth.setValue(nWidth);if (!bRet){printf("set width fail.\n");return;}CIntNode nodeHeight(m_pCamera, "Height");bRet = nodeHeight.setValue(nHeight);if (!bRet){printf("set Height fail.\n");return;}CIntNode OffsetX(m_pCamera, "OffsetX");bRet = OffsetX.setValue(nX);if (!bRet){printf("set OffsetX fail.\n");return;}CIntNode OffsetY(m_pCamera, "OffsetY");bRet = OffsetY.setValue(nY);if (!bRet){printf("set OffsetY fail.\n");return;}
//    bool bRet;
//    IImageFormatControlPtr sptrImageFormatControl = CSystem::getInstance().createImageFormatControl(m_pCamera);
//    if (NULL == sptrImageFormatControl)
//    {//        return;
//    }//    /* width */
//    CIntNode intNode = sptrImageFormatControl->width();
//    bRet = intNode.setValue(nWidth);
//    if (!bRet)
//    {//        printf("set width fail.\n");
//    return;
//    }//    /* height */
//    intNode = sptrImageFormatControl->height();
//    bRet = intNode.setValue(nHeight);
//    if (!bRet)
//    {//        printf("set height fail.\n");
//    return;
//    }//    /* OffsetX */
//    intNode = sptrImageFormatControl->offsetX();
//    bRet = intNode.setValue(nX);
//    if (!bRet)
//    {//        printf("set offsetX fail.\n");
//    return;
//    }//    /* OffsetY */
//    intNode = sptrImageFormatControl->offsetY();
//    bRet = intNode.setValue(nY);
//    if (!bRet)
//    {//        printf("set offsetY fail.\n");
//    return;
//    }return;
}void Video::setBinning()
{CEnumNodePtr ptrParam(new CEnumNode(m_pCamera, "Binning"));if (ptrParam){if (false == ptrParam->isReadable()){printf("binning not support.\n");return;}if (false == ptrParam->setValueBySymbol("XY")){printf("set Binning XY fail.\n");return;}//        if (false == ptrParam->setValueBySymbol("Off"))
//        {//            printf("set Binning Off fail.\n");
//            return;
//        }}return;
}void Video::setFrameRate(double rate)
{bool bRet;IAcquisitionControlPtr sptAcquisitionControl = CSystem::getInstance().createAcquisitionControl(m_pCamera);if (NULL == sptAcquisitionControl){return;}CBoolNode booleanNode = sptAcquisitionControl->acquisitionFrameRateEnable();bRet = booleanNode.setValue(true);if (false == bRet){printf("set acquisitionFrameRateEnable fail.\n");return;}CDoubleNode doubleNode = sptAcquisitionControl->acquisitionFrameRate();bRet = doubleNode.setValue(rate);if (false == bRet){printf("set acquisitionFrameRate fail.\n");return;}
}

2.3安装工业相机SDK及测试相关推荐

  1. 海康工业相机SDK+OpenCV实例(1):海康SDK和OPENCV的安装与编译

    海康工业相机SDK+OpenCV实例(1) 海康SDK和OPENCV的安装与编译 文章目录 海康工业相机SDK+OpenCV实例(1) 海康SDK和OPENCV的安装与编译 前言 一.海康SDK安装 ...

  2. Linux环境中对海康威视工业相机SDK进行二次开发(QT+CMake+Opencv+海康SDK)

    关于在Windows环境中对海康威视工业相机SDK进行二次开发的话,可以参考这两篇博客. 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一) 海康威视工业相机SDK二 ...

  3. Java_JDK19.0.2_Ubuntu18.04中配合海康工业相机SDK环境搭建

    Java_JDK19.0.2_Ubuntu18.04中配合海康工业相机SDK环境搭建 简介 1. JDK环境搭建 JDK下载 JDK环境安装 2. 工业相机环境SDK安装 简介 本文主要介绍在ubun ...

  4. (一)Qt+OpenCV调用海康工业相机SDK示例开发

    系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 文章目录 系列文章目录 ...

  5. centos java yum_CentOS7 使用yum命令安装Java SDK

    CentOS 6.X 和 7.X 自带有OpenJDK runtime environment  (openjdk).它是一个在linux上实现开源的Java 平台. 安装方式: 1.输入以下命令,以 ...

  6. Eclipse For JavaSE安装、配置、测试

    Eclipse For JavaSE安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与配置 4.JavaSE开发测试 5.ADT安装与Android开发测试 6. ...

  7. 海康机器人工业相机sdk简介

    海康机器人工业相机SDK获取与简单介绍 SDK下载 SDK组成 1.头文件 2.静态库/lib库 3.动态库 4.开发文档 5.示例程序 SDK下载 在海康机器人的官网下载中心-> 海康机器人下 ...

  8. Android Studio安装与SDK配置

    工欲善其事必先利其器,对于我们开发者来说,好的工具能提高开发效率: Android开发,不得不提的IDE就是Eclipse以及AndroidStudio:可以说大多数安卓开发者都是使用Eclipse开 ...

  9. 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一)

    最近在做一个项目,涉及到工业相机,需要对其进行二次开发.相机方面选择了海康威视,网上关于海康威视工业相机SDK的开发资料很少,官方文档里面虽然写的是支持C++开发的,但其实是C.自己也摸索了一段时间, ...

  10. 海康威视工业相机SDK二次开发环境配置—Windows10+VS2017

    参考链接: https://blog.csdn.net/motikesi/article/details/108287951 一.SDK下载地址: https://www.hikrobotics.co ...

最新文章

  1. python改变字符串类型_python – Sklearn将字符串类标签更改为int
  2. 前端学习(2564):如何触发组件的更新
  3. EasyUI,对treegrid进行编辑
  4. day7 地址 名片管理系统
  5. 新的开始,从CSDN
  6. C语言从入门到放弃视频教程
  7. python 直方图匹配_Python OpenCV 直方图匹配
  8. 用户行为监控(Piwik)
  9. 大学三年来的心路历程分享
  10. One Pixel Attack(对抗攻击) —— 使用差分进化算法寻找最优解
  11. TJOI2015 弦论
  12. UML中各种线条关系记忆技巧
  13. [论文笔记] Detection of Glottal Closure Instants from Speech Signals: CNN Method
  14. html项目符号正方形,HTML无序列表| HTML项目符号列表
  15. oracle 11g Data Guard物理备份库
  16. Unity内存管理的原理
  17. 利用先序遍历输入法建立二叉树
  18. 爬虫——把jason格式用pandas化成dataframe
  19. java 课设-超级玛丽游戏
  20. 《拖延症心理学》读感

热门文章

  1. OpenWrt路由器WIFI开启13信道
  2. HG_REPMGR configure配置
  3. 军用设备环境试验方法湿热试验标准
  4. ftp搭建和定时增量同步实现
  5. mysql数据表删了怎么恢复_mysql数据库数据删除怎么恢复
  6. 部署ASDM图形化工具
  7. AUTOCAD——样条曲线命令
  8. eml文件可以转换为html,eml格式转换成word eml文件转换word
  9. Java数组排序(选择排序)
  10. 驱动INF文件解析和 为自己的设备安装指定驱动