68、ubunut/window使用海康彩色工业相机

本文记录了如何在Ubuntu和Windows系统上配置并使用海康工业相机,包括通过桌面软件验证相机功能,使用Visual Studio 2022进行C++开发,以及在Ubuntu环境下利用OpenCV驱动相机的步骤。

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

### 安装必要组件 为了使Python能够在Ubuntu操作系统中与海康威视工业相机进行交互,需先安装一系列依赖项和工具。这包括但不限于CMake、Qt库以及其他可能由具体项目需求决定的支持软件。 对于海康威视工业相机SDK的部署,确保已下载适用于Linux平台版本的官方SDK包[^1]。接着按照官方文档说明完成基本环境配置工作,通常涉及设置环境变量以便于后续操作能够顺利找到所需的动态链接库文件位置。 #### 配置开发环境 考虑到兼容性和稳定性因素,建议创建一个新的Conda虚拟环境来管理整个项目的依赖关系: ```bash conda create -n hikvision python=3.9 conda activate hikvision ``` 随后依据个人喜好选择合适的包管理器(pip或conda)来进行额外第三方模块的引入,比如用于图像处理的OpenCV等[^3]。 ### 编写Python代码实现图像采集功能 当上述准备工作完成后,即可着手准备具体的编程逻辑部分。下面给出了一段简单的示例代码片段展示如何利用Python接口访问并控制连接至系统的单台设备执行拍照动作: ```python from ctypes import cdll, c_char_p, POINTER, Structure, byref import numpy as np import cv2 class NET_DVR_DEVICEINFO_V40(Structure): _fields_ = [("sSerialNumber", c_char_p * 48), ("byAlarmInPortNum", c_char_p), ("byAlarmOutPortNum", c_char_p)] def init_camera(): HCNetSDK = cdll.LoadLibrary('./libhcnetsdk.so') user_info = NET_DVR_INIT() device_info = NET_DVR_DEVICEINFO_V40() result = HCNetSDK.NET_DVR_Init(user_info) if not result: raise Exception("Initialization failed") camera_handle = HCNetSDK.NET_DVR_Login_V40( "camera_ip_address".encode(), 8000, "username".encode(), "password".encode(), byref(device_info)) return HCNetSDK, camera_handle def capture_image(HCNetSDK, camera_handle): frame_buffer_ptr = POINTER(c_ubyte)() buffer_size = c_ulonglong(0) ret_code = HCNetSDK.NET_DVR_GetPicture(camera_handle, None, byref(frame_buffer_ptr), byref(buffer_size)) if ret_code != 1: print(f"Failed to get picture with error code {ret_code}") return img_array = np.ctypeslib.as_array((c_ubyte * buffer_size.value).from_address(addressof(frame_buffer_ptr.contents)), shape=(buffer_size.value,)) image_data = cv2.imdecode(img_array, cv2.IMREAD_COLOR) return image_data if __name__ == "__main__": sdk_lib, cam_hdl = init_camera() try: while True: img = capture_image(sdk_lib, cam_hdl) if img is not None: cv2.imshow('Camera Feed', img) keypress = cv2.waitKey(1) & 0xFF if keypress == ord('q'): break finally: sdk_lib.NET_DVR_Cleanup() cv2.destroyAllWindows() ``` 这段脚本首先加载了`libhcnetsdk.so`这个共享对象作为与硬件通信的基础层,定义了一个结构体用来存储来自摄像头的信息,并实现了两个主要函数分别负责初始化会话以及抓取当前帧画面。最后主循环里不断调用后者刷新窗口直到按下'Q'键退出程序运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sxj731533730

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值