news 2026/5/30 17:23:01

python opencv 调用 海康威视工业相机(又全又细又简洁)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python opencv 调用 海康威视工业相机(又全又细又简洁)

安装依赖

确保已安装OpenCV和hikvision官方SDK(HCNetSDK)。OpenCV可通过pip安装:

pip install opencv-python

海康SDK需从官网下载,解压后根据系统类型(Windows/Linux)安装驱动和库文件。

初始化相机连接

使用海康SDK的NET_DVR_Login_V40函数登录设备。需要设备IP、用户名、密码:

from ctypes import * import cv2 # 加载海康SDK hik_sdk = cdll.LoadLibrary('./libhcnetsdk.so') # Linux路径示例 # 设备登录参数 device_info = NET_DVR_DEVICEINFO_V40() login_params = NET_DVR_USER_LOGIN_INFO() login_params.bUseAsynLogin = 0 login_params.sDeviceAddress = "192.168.1.64".encode('utf-8') login_params.sUserName = "admin".encode('utf-8') login_params.sPassword = "password".encode('utf-8') # 登录设备 user_id = hik_sdk.NET_DVR_Login_V40(byref(login_params), byref(device_info)) if user_id < 0: print("登录失败,错误码:", hik_sdk.NET_DVR_GetLastError())

https://www.zhihu.com/zvideo/1994569686508122814/
https://www.zhihu.com/zvideo/1994569686768178579/
https://www.zhihu.com/zvideo/1994569684880745186/
https://www.zhihu.com/zvideo/1994569683186255158/
https://www.zhihu.com/zvideo/1994569682783586161/
https://www.zhihu.com/zvideo/1994569682389325822/
https://www.zhihu.com/zvideo/1994569677238728015/
https://www.zhihu.com/zvideo/1994569676244685752/
https://www.zhihu.com/zvideo/1994569675984633884/
https://www.zhihu.com/zvideo/1994569673912627338/
https://www.zhihu.com/zvideo/1994569673384167055/
https://www.zhihu.com/zvideo/1994569671656112881/
https://www.zhihu.com/zvideo/1994569669596693190/
https://www.zhihu.com/zvideo/1994569667394688542/
https://www.zhihu.com/zvideo/1994569666249643514/
https://www.zhihu.com/zvideo/1994569665691813199/
https://www.zhihu.com/zvideo/1994569665029096195/
https://www.zhihu.com/zvideo/1994569663816938831/
https://www.zhihu.com/zvideo/1994569661929497422/
https://www.zhihu.com/zvideo/1994569661237454557/
https://www.zhihu.com/zvideo/1994569660566353291/
https://www.zhihu.com/zvideo/1994569660897726783/
https://www.zhihu.com/zvideo/1994569660025308385/
https://www.zhihu.com/zvideo/1994569658183988614/
https://www.zhihu.com/zvideo/1994569657361929213/
https://www.zhihu.com/zvideo/1994569655495460306/
https://www.zhihu.com/zvideo/1994569653591229700/
https://www.zhihu.com/zvideo/1994569653993886152/
https://www.zhihu.com/zvideo/1994569654266532186/
https://www.zhihu.com/zvideo/1994569653578655542/
https://www.zhihu.com/zvideo/1994569653842907927/
https://www.zhihu.com/zvideo/1994569653675118687/
https://www.zhihu.com/zvideo/1994569647358506510/
https://www.zhihu.com/zvideo/1994569646762898236/
https://www.zhihu.com/zvideo/1994569647014577147/
https://www.zhihu.com/zvideo/1994569646167315608/
https://www.zhihu.com/zvideo/1994569645391376785/
https://www.zhihu.com/zvideo/1994569644510569158/
https://www.zhihu.com/zvideo/1994569643025777244/
https://www.zhihu.com/zvideo/1994569641603916999/
https://www.zhihu.com/zvideo/1994569641608102417/
https://www.zhihu.com/zvideo/1994569641595515416/
https://www.zhihu.com/zvideo/1994569640622453612/
https://www.zhihu.com/zvideo/1994569639607441023/
https://www.zhihu.com/zvideo/1994569639267702636/
https://www.zhihu.com/zvideo/1994569639645164124/
https://www.zhihu.com/zvideo/1994569637866784452/
https://www.zhihu.com/zvideo/1994569637778710888/
https://www.zhihu.com/zvideo/1994569638638531948/
https://www.zhihu.com/zvideo/1994569637694816654/

实时取流配置

通过NET_DVR_RealPlay_V40启动实时流,并设置回调函数接收帧数据:

# 回调函数定义(C类型) def real_data_cb(lRealHandle, dwDataType, pBuffer, dwBufSize, pUser): if dwDataType == NET_DVR_SYSHEAD: # 初始化FFMPEG解码器等(如需) pass elif dwDataType == NET_DVR_STREAMDATA: # 将数据转为OpenCV格式 frame_data = cast(pBuffer, POINTER(c_byte * dwBufSize)).contents frame_np = np.frombuffer(frame_data, dtype=np.uint8) frame = cv2.imdecode(frame_np, cv2.IMREAD_COLOR) cv2.imshow("Hikvision Stream", frame) cv2.waitKey(1) # 注册回调 REALDATACALLBACK = CFUNCTYPE(None, c_long, c_uint, POINTER(c_byte), c_uint, c_void_p) callback_func = REALDATACALLBACK(real_data_cb) # 启动实时流 play_params = NET_DVR_PREVIEWINFO() play_params.hPlayWnd = 0 play_params.lChannel = 1 # 通道号 play_params.dwStreamType = 0 # 主码流 play_params.dwLinkMode = 0 # TCP real_handle = hik_sdk.NET_DVR_RealPlay_V40(user_id, byref(play_params), callback_func, None)

帧处理与显示

在回调函数中完成帧数据到OpenCV格式的转换后,可进行图像处理:

# 示例:灰度化处理 gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow("Processed Frame", gray_frame)

释放资源

程序结束时需释放资源:

hik_sdk.NET_DVR_StopRealPlay(real_handle) hik_sdk.NET_DVR_Logout(user_id) hik_sdk.NET_DVR_Cleanup() cv2.destroyAllWindows()

注意事项

  • 确保设备网络可达,防火墙放行相应端口(默认8000)。
  • 海康SDK需与相机固件版本兼容,建议使用最新SDK。
  • 工业相机可能需要额外配置参数(如曝光、增益),通过NET_DVR_SetDVRConfig实现。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 11:02:59

完整指南:AUTOSAR架构图配置工具链使用

从零构建汽车电子系统&#xff1a;AUTOSAR架构图与配置工具链实战指南你有没有遇到过这样的场景&#xff1f;一个ECU项目刚进入集成阶段&#xff0c;不同团队交付的模块却因为信号命名不一致、数据类型错位、通信时序冲突而无法对接。调试数周后才发现&#xff0c;问题根源竟是…

作者头像 李华
网站建设 2026/5/21 12:13:52

xTaskCreate与外设驱动集成:从零实现

从裸机到多任务&#xff1a;用xTaskCreate构建真正“活着”的嵌入式系统你有没有遇到过这样的场景&#xff1f;一个简单的温湿度采集项目&#xff0c;开始只是轮询读一下传感器、点个灯、串口打个日志。后来加了 LoRa 发送&#xff0c;再后来要支持远程配置命令&#xff0c;还要…

作者头像 李华
网站建设 2026/5/22 3:42:32

Arduino安装驱动手动加载步骤:项目应用实例

Arduino驱动安装实战&#xff1a;从手动加载到工业传感器采集的完整链路打通 你有没有遇到过这样的场景&#xff1f; 新买的Arduino开发板插上电脑&#xff0c;IDE里却死活找不到端口&#xff1b;设备管理器里躺着一个带黄色感叹号的“未知USB设备”&#xff1b;点击上传代码…

作者头像 李华
网站建设 2026/5/30 11:35:59

[特殊字符]️_开发效率与运行性能的平衡艺术[20260113165855]

作为一名经历过无数项目开发的工程师&#xff0c;我深知开发效率与运行性能之间的平衡是多么重要。在快节奏的互联网行业&#xff0c;我们既需要快速交付功能&#xff0c;又需要保证系统性能。今天我要分享的是如何在开发效率和运行性能之间找到最佳平衡点的实战经验。 &#…

作者头像 李华
网站建设 2026/5/26 23:02:43

互联网大厂Java面试:从Java SE到微服务的技术深度剖析

场景描述 在互联网大厂的一次Java面试中&#xff0c;程序员谢飞机面对严肃的面试官&#xff0c;开始了一场技术上的较量。面试官精心准备了一系列从Java SE到微服务的技术问题&#xff0c;涵盖了广泛的技术栈&#xff0c;包括Java语言、构建工具、web框架以及微服务架构等。 第…

作者头像 李华
网站建设 2026/5/29 10:52:28

Windows设备管理器驱动安装:操作指南(手把手教学)

手把手教你搞定Windows驱动安装&#xff1a;从“未知设备”到完美识别 你有没有遇到过这样的情况&#xff1f;刚插上一个新买的USB网卡&#xff0c;或者换了一块主板&#xff0c;结果系统里冒出个“未知设备”&#xff0c;还带个黄色感叹号。点开一看&#xff0c;啥信息都没有…

作者头像 李华