news 2026/4/16 14:29:22

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/4/16 12:59:51

Playwright高级技巧:自定义选择器与定位器

在日常的Web自动化测试中&#xff0c;我们都遇到过这样的场景&#xff1a;页面上那些没有规范属性、动态生成的元素&#xff0c;让编写稳定的选择器变成了一场噩梦。上周我就花了整整一个下午&#xff0c;只为了定位一个不断变换class名的下拉菜单——这种情况在如今的单页应用…

作者头像 李华
网站建设 2026/4/13 14:49:18

Playwright测试报告生成:Allure报告集成实战

对于现代自动化测试来说&#xff0c;生成直观、专业的测试报告已经不再是“锦上添花”&#xff0c;而是提高测试效率和问题排查能力的必要环节。最近我在项目中将Playwright与Allure报告系统集成&#xff0c;彻底改变了我们团队查看和分析测试结果的方式。如果你也厌倦了控制台…

作者头像 李华
网站建设 2026/4/16 13:00:05

Keil软件下51单片机流水灯代码调试技巧全面讲解

从零开始掌握51单片机流水灯调试&#xff1a;Keil实战全解析你有没有过这样的经历&#xff1f;写完一段看似完美的流水灯代码&#xff0c;烧录进单片机后——灯不亮、乱闪、卡死……反复拔插下载线&#xff0c;换电源、换芯片、甚至怀疑人生。而当你打开Keil&#xff0c;却不知…

作者头像 李华
网站建设 2026/4/16 13:16:06

别让错招毁了团队:入职背景调查,为企业把好人才第一关

“面试时思路清晰、态度积极&#xff0c;入职后却频频出错&#xff0c;连简历上的核心项目经验都是编造的”——这是HR小林最近的烦心事。一场看似成功的招聘&#xff0c;最终却让团队陷入返工内耗&#xff0c;还得重新开启招聘流程。其实&#xff0c;这类招聘“踩雷”的背后&a…

作者头像 李华
网站建设 2026/4/16 13:44:27

核心要点:如何判断是STLink损坏还是配置错误

如何精准判断STLink是真坏了还是配置翻车&#xff1f;从物理连接到固件调试的全链路排障实战 你有没有经历过这样的时刻&#xff1f; 刚坐下准备烧个程序&#xff0c;打开STM32CubeProgrammer&#xff0c;点“Connect”——结果弹出一个冷冰冰的提示&#xff1a; No ST-LINK…

作者头像 李华
网站建设 2026/4/16 11:13:37

STLink与STM32怎么接线?一文说清基本连接步骤

STLink与STM32怎么接线&#xff1f;一文讲透调试连接的底层逻辑与实战要点在嵌入式开发中&#xff0c;一个看似简单的问题——STLink与STM32怎么接线&#xff0c;却常常让不少工程师卡在项目起步阶段。你有没有遇到过这样的情况&#xff1a;代码写好了&#xff0c;IDE也配置完毕…

作者头像 李华