def FindDevices(self):
device_list = MV_CC_DEVICE_INFO_LIST()
find_device_ret = MvCamera.MV_CC_EnumDevices(MV_USB_DEVICE, device_list)
if find_device_ret == 0:
return device_list
else:
return False
def GetImages(self, show_device_num, device_list):
i = 0
if show_device_num <= device_list.nDeviceNum:
device_info = cast(device_list.pDeviceInfo[int(show_device_num)], POINTER(MV_CC_DEVICE_INFO)).contents
cam = MvCamera()
handle_ret = cam.MV_CC_CreateHandle(device_info)
if handle_ret != 0:
print("创建句柄失败")
# 打开设备
open_device = cam.MV_CC_OpenDevice(MV_ACCESS_Exclusive, 0)
if open_device != 0:
print('开启失败')
# 获取相机int型节点值 "PayloadSize" 为当前节点得名称,一帧节点的大小
camera_int_param = MVCC_INTVALUE()
int_value_ret = cam.MV_CC_GetIntValue("PayloadSize", camera_int_param)
if int_value_ret != 0:
print('获取图像信息失败')
image_data_size = (c_ubyte * camera_int_param.nCurValue)()
image_data_length = camera_int_param.nCurValue
# 开始抓流
grab_ret = cam.MV_CC_StartGrabbing()
if grab_ret != 0:
print('抓起流失败')
# 获取数据大小
# 下面将获得每一帧的图像
while True:
frame_info = MV_FRAME_OUT_INFO_EX()
memset(byref(frame_info), 0, sizeof(frame_info))
frame_ret = cam.MV_CC_GetOneFrameTimeout(image_data_size, image_data_length, frame_info, 1000)
if frame_ret != 0:
print('获取帧信息失败')
nRGBSize = frame_info.nWidth * frame_info.nHeight
convert_param = MV_CC_PIXEL_CONVERT_PARAM()
memset(byref(convert_param), 0, sizeof(convert_param))
convert_param.nWidth = frame_info.nWidth
convert_param.nHeight = frame_info.nHeight
convert_param.pSrcData = image_data_size
convert_param.nSrcDataLen = frame_info.nFrameLen
convert_param.enSrcPixelType = frame_info.enPixelType
convert_param.enDstPixelType = frame_info.enPixelType
convert_param.pDstBuffer = (c_ubyte * nRGBSize)()
convert_param.nDstBufferSize = nRGBSize
ret = cam.MV_CC_ConvertPixelType(convert_param)
if ret != 0:
print("convert pixel fail! ret[0x%x]" % ret)
del image_data_size
sys.exit()
img_buff = (c_ubyte * convert_param.nDstLen)()
cdll.msvcrt.memcpy(byref(img_buff), convert_param.pDstBuffer, convert_param.nDstLen)
img = np.array(img_buff, dtype=np.int8)
Img = img.reshape(1024, 1280)
Img = cv.flip(Img, -1)
Img = cv.flip(Img, -1)
cv.imshow('img' + str(show_device_num), Img)
cv.waitKey(25)
if __name__ == '__main__':
a = AccessToImages()
device_list = a.FindDevices()
if a:
a.GetImages(0, device_list)
# print(device_list.nDeviceNum)
主动获取图像有两种方式:
方式一:调用 MV_CC_StartGrabbing_NET() 开始采集,需要自己开启一个buffer,然后在应用层循环调用 MV_CC_GetOneFrameTimeout_NET() 获取指定像素格式的帧数据,获取帧数据时上层应用程序需要根据帧率控制好调用该接口的频率。
方式二:调用 MV_CC_StartGrabbing_NET(...
导致海康MVS无法识别相机,无论你怎么卸载相机驱动还是重装客户端,都只出现一个问题就是无驱动,如下情况:
出现这个的原因是halcon占用了usb驱动,导致客户端识别不了,同时halcon更改了这个驱动。
打开设备管理器,选择
右键点击更新驱动程序,之后点击
然后选择:
之后在halcon采集助手中,选择否
并将接口设置为
此时在打开,采集,实时就可以了。
通过python调用海康威视工业摄像头并进行图像存储问题(数据流获取问题未能解决)
先说情况,本人是做视觉检测的需要高倍率摄像头进行实时检测,也就是需要深度学习进行图片数据处理,但是这个又是python来进行分析,而海康威视主要程序代码是以C为主的,传过来的数据我也尝试的去解析都是不能转化成python的BGR图像。
具体参照了:通过cv2调用海康威视摄像头,但这个不能调用工业摄像头,通过官方给一个400什么软件要激活摄像头,可是却并不能检测到工业摄像头,通过mvs软件调用到摄像头地址进行测试也无法获取到摄
文章目录平台环境配置下载配置开发流程设备连接主动取流流程代码代码效果
windows10 + vs2019 + MV-CA050-10GM + HIKCAMERA SDK版本v3.3.0 + OpenCV3.3.1
HIKCAMERA SDK下载:https://www.hikrobotics.com/service/download/0/0
出现这个问题的原因是Halcon更改了相机的驱动...所以光是退出Halcon是无法解决这个问题的。为了让更多碰到相同问题的人能快速解决问题,我在这里转载了图像处理大神的文章。
[原文link](https://blog.csdn.net/weixin_42398658/article/details/104293610)
题主的环境 是:win10 + halcon17+海康工业相机(M
def work_thread(cam=0, pData=0, nDataSize=0):
stFrameInfo = MV_FRAME_OUT_INFO_EX()
memset(byref(stFrameInfo), 0, sizeof(stFrameInfo))
data_buf = (c_ubyte * nDataSize)()
while True:
三、主动取流( getimagebuffer)对黑白图像数据解析并用 opencv 显示
1.主动取流( getimagebuffer)数据获取并解析 mono 格式的图像数据
2.图像数据显示
四、主动取...
Python是目前非常流行的一种编程语言,而海康威视则是一家致力于智能安防等领域的厂商。针对Python和海康相机的结合,也就是Python海康工业相机,这是一种可以将普通的海康威视摄像头转化为一种工业相机的技术。这样一来,借助于Python编程的优势,能够更加灵活地控制海康相机的拍摄功能以及图像处理过程,从而能够实现更多样化的应用。
在Python海康工业相机的应用中,首先需要实现的就是海康相机的采集功能,通过Python编程启动相机拍摄图像或视频流,并对采集到的数据进行相应地处理。这种技术可以使得使用者根据自己的需求进行灵活的二次开发,实现更多的应用场景,例如机器视觉、工业自动化、智能交通等领域。
总之,Python海康工业相机的出现,让普通的海康相机具备了更多的灵活性和可塑性。这样一种技术,无疑将会受到越来越多的开发者和用户的青睐,开启更多应用的可能性。