rm记录第三阶段(二):海康威视工业相机的使用,cmake的复习

本文介绍了使用海康威视工业相机的过程,包括下载客户端和SDK,运行setup.sh以及理解相机使用的基本步骤。同时,文章详细探讨了CMake的使用,从设置版本号、工程名到生成可执行文件,再到配置头文件、添加库和库文件。作者通过实际案例学习CMake,并尝试将图像转换为mat对象,最终成功实现相机图像的显示,但还未完成图像转换。文章还提及网络摄像头的工作原理,并表示将研究网络传输图像的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

相机到了,这也是我的第一次使用相机,然后呢在大符识别的程序完事后也是搁了很长的时间,然后工训的省赛也是比完了,反正这次比赛我深刻的认识到现场环境对视觉的影响真的是太大了,所以现在我也是得考虑现场的因素啥的,还有就是最近也是自己没有很上进,想得也是太多了,其实我更应该注重当下呀!

那来把啊,注重当下,开干!

我们使用的是海康的工业相机,先了解一下什么是工业相机去!

首先我们在官网上下载客户端和sdk,然后我下载的是arrch64的,这个是网站:https://www.hikrobotics.com/machinevision/service/download?module=0

然后的话就是先要运行一下那个 setup.sh 那个,然后记住这里要用sudo否则没有权限!

然后的话也是将第一个案例成功的运行了,但是图像采集的不太好呀啊!


Cmake

然后我们学一下cmake,其实我感觉忘我的cmake老是学得不透,那么趁着这次我再次学一下。

然后的话通过几个例子来学习一下下:

1.最简单的就是先设置一个版本号然后就是工程的名字,最后就是生成一个可执行文件

cmake_minimum_required (VERSION 2.6)
project (Tutorial)
add_executable(Tutorial tutorial.cxx)

2.配置头文件,这里以前确实是没有注意到呀。这个就是设置个目录不是添加某文件

添加头文件目录INCLUDE_DIRECTORIES

语法: include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...]) 它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用:

如:include_directories(../../../thirdparty/comm/include)
cmake_minimum_required (VERSION 2.6)
project (Tutorial)
# The version number.
set (Tutorial_VERSION_MAJOR 1)
set (Tutorial_VERSION_MINOR 0)
 
# configure a header file to pass some of the CMake settings
# to the source code
configure_file (
  "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
  "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  )
 
# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
include_directories("${PROJECT_BINARY_DIR}")
 
# add the executable
add_executable(Tutorial tutorial.cxx)

3.添加一个 库 

语法: link_directories(directory1 directory2 ...) 它相当于g++命令的-L选项的作用,也相当于环境变量中增加LD_LIBRARY_PATH的路径的作用。

如:link_directories("/home/server/third/lib")

现在我们为我们的工程添加一个库。这个库包含了自己实现的一个用来计算数的平方根函数。应用程序可以使用这个库来计算平方根,而不是使用编译器提供的标准库。教程里我们会把这个库放到一个叫做”MathFunctions”的子文件夹中。它包含一个只有一行内容的CMakeLists.txt文件,这里注意一下就是我们是分子文件夹的。

add_library(MathFunctions mysqrt.cxx)

文件”mysqrt.cxx”有一个叫做mysqrt的函数,它跟编译器提供的sqrt函数类似。为了使用这个新库,我们要在顶层的CMakeLists.txt中添加”add_subdirectory”调用,以便使这个库能够被编译到.我们还需要添加另外一个包含文件夹以便找到包含在头文件”MathFunctions/MathFunctions.h”中的函数原型.最后把新库添加到应用程序当中,在顶层的CMakeLists.txt文件中添加如下内容:

include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions)
# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial MathFunctions)

然后这里说下流程:先在子文件夹中生成一个自己生成的库然后下一步在主的cmakelisits里包含这个目录,然后添加这个库,最后将这个库链接到可执行文件上去。

4.最后就是去添加库文件

这个一会直接上案例,看最后一行


然后的话:记住在main文件里的要写绝对路径

最后运行成功了,然后看一下CMakeLists.txt是怎么写的吧:用时记得换路径

project(fan)
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)

find_package(OpenCV REQUIRED)
find_package(OpenCV QUIET COMPONENTS core highgui imgproc imgcodecs videoio)

AUX_SOURCE_DIRECTORY(./ DIR_SRCS)

include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(/home/dji/文档/RM2021/capture/MVS/inlude)
link_directories(${OpenCV_LIBRARY_DIRS})
link_directories("/home/dji/文档/RM2021/capture/MVS/lib/aarch64")
link_libraries("/home/dji/文档/RM2021/capture/MVS/lib/aarch64/libMvCameraControl.so")
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
add_compile_options(-std=c++11)
#-Wall -Werror
ADD_EXECUTABLE(fan ${DIR_SRCS})
target_link_libraries(fan ${OpenCV_LIBS})
target_link_libraries(fan -lpthread -luuid -lMvCameraControl -lX11)
target_link_libraries(fan libMvCameraControl.so)

开始使用相机

然后我们就学一下这个display.cpp这个文件,也就是如何调用相机

然后我们从主函数看起:这个主函数有点蒙呀,主要我不知道这个库有那些函数呀,直接看代码有点看不懂呀.........要不我就直接套用,然后吧其中的图像处理的换成我们想用的!试试看吧!ImageProcess.cpp看这个cpp文件!

现在我在想怎么将获得的图像转 换 成mat对象呢!: https://www.hikvision.com/cn/download_60.html 这个是海康的官网吧,去看看去!

然后我也是参考了一些的博客先了解了一下相机的工作流程:

  1. 枚举设备
  2. 判断设备类型:基于以上枚举设备接口调用获取的设备列表,可以获取设备是哪种类型设备并对其中的信息加以利用和输出;

  3. 输入连接设备

  4. 创建相机实例并创建句柄

  5. 打开设备

  6. 获取相关参数

  7. 获取图像:在海康的接口调用中,取图方式分为两种方式,第一种是主动取图,第二种是回调取图;

  8. 开始取流

  9. 停止取流

  10. 销毁句柄

感觉好复杂呀.......不过好像复杂的就是前面的几步吧,因为毕竟是网络摄像头,然后就是可能opencv的capture类用惯了,一时有点不适应,那么我感觉还是把一个例子看懂吧,否则一直都不会懂的,也不要着急,一步步来!

那么我们就说下这些东西吧!

直接main函数看起,对了这个是ImageProcess.cpp

    int nRet = MV_OK;

    void* handle = NULL;
	unsigned char * pData = NULL;        
    unsigned char *pDataForRGB = NULL;
    unsigned char *pDataForSaveImage = NULL;

上来先来

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值