python通过调用海康SDK打开工业相机(全流程)
安装海康SDK
从海康威视官网下载对应的工业相机SDK(如MV-SDK),解压后运行安装程序。确保安装路径无中文或特殊字符。安装完成后,将SDK的lib目录添加到系统环境变量(如Windows的PATH),或直接复制*.dll文件到Python脚本同级目录。
配置Python依赖
安装Python与海康SDK交互的库,通常通过ctypes调用动态链接库。确保Python版本与SDK的位数一致(32/64位)。示例安装命令:
pip install numpy opencv-python # 可选,用于图像处理 初始化SDK与设备
通过ctypes加载SDK动态库,并调用初始化函数。示例代码:
import ctypes # 加载SDK库 sdk_lib = ctypes.cdll.LoadLibrary("MvCameraControl.dll") # 初始化设备 device_list = ctypes.c_void_p() sdk_lib.MV_CC_EnumDevices(ctypes.byref(device_list)) 打开相机并设置参数
选择设备并打开连接,配置采集参数(如分辨率、曝光时间):
# 选择第一个设备 handle = ctypes.c_void_p() sdk_lib.MV_CC_CreateHandle(ctypes.byref(handle), device_list) # 打开设备 ret = sdk_lib.MV_CC_OpenDevice(handle) if ret != 0: raise RuntimeError("Failed to open device") # 设置参数(示例:曝光时间) exposure_time = ctypes.c_float(1000.0) sdk_lib.MV_CC_SetFloatValue(handle, "ExposureTime", exposure_time) 开始采集图像
启动相机采集并获取图像数据流:
# 开始采集 sdk_lib.MV_CC_StartGrabbing(handle) # 获取图像数据 data_buf = (ctypes.c_ubyte * 1024 * 1024)() # 缓冲区 frame_info = ctypes.create_string_buffer(1024) ret = sdk_lib.MV_CC_GetOneFrameTimeout(handle, data_buf, len(data_buf), frame_info, 1000) if ret != 0: raise RuntimeError("Failed to grab frame") 转换与显示图像
将原始数据转换为OpenCV格式并显示:
import numpy as np import cv2 # 转换为numpy数组 img_data = np.frombuffer(data_buf, dtype=np.uint8) img = cv2.imdecode(img_data, cv2.IMREAD_COLOR) # 显示图像 cv2.imshow("Industrial Camera", img) cv2.waitKey(0)
释放资源
停止采集并关闭设备:
# 停止采集 sdk_lib.MV_CC_StopGrabbing(handle) # 关闭设备 sdk_lib.MV_CC_CloseDevice(handle) sdk_lib.MV_CC_DestroyHandle(handle) 注意事项
- 确保SDK版本与相机型号匹配,部分函数名可能因版本不同存在差异。
- 错误处理需检查每个API调用的返回值,海康SDK通常返回
0表示成功。 - 多线程环境下需加锁或使用回调机制处理图像数据。