海康工业相机Python调用实现连续实时拍照

文章目录

  • 海康工业相机Python调用实现连续实时拍照
    • 前言:
    • 参考链接:
    • 提前设置:
    • 图片数据流的获取:
    • 代码:

前言:

海康的相机调用简直太复杂了。当然相比point gray fly的相机无法python调用要好很多。
为了将照片调用打包成类,我竟然花了两天时间?
这里做一个简单的记录。希望能给大伙儿一个分享。

参考链接:

海康工业相机Python调用实现拍照
通过python调用海康威视工业摄像头并进行图像存储(数据流获取问题未能解决)

提前设置:

  1. 先安装MVS,下载地址
  2. 条件:Python+海康官方的mvs文件下的development/samples下的python文件夹
  3. 注意:相机连接后不要用官方app打开相机,不然python代码检测不到设备,代码在pycharm会提示报错,亲测能跑并能截取到图片
  4. 需要添加模块MvImport的路径:
    这是整个代码的核心,文件里面内容如下,具体可以下载MVS里面例程里面有:
import sys
sys.path.append("C:\Program Files (x86)\MVS\Development\Samples\Python\MvImport")

图片数据流的获取:

save_image2local函数部分,主要是将C程序给过来的数据流进行了一个转换,仔细看保存的路径不难看出,img_buff就是我们想要的图像数据流。
但是我把它print出来的时候它仍然是一个C*ubyte的数据类型,所以没法直接用python-opencv进行直接读取,即不能直接转成numpy array的形式。
只能先将其存储下来然后再通过cv2进行读取来进行一系列图片操作。
file_path是我们图片存储的路径,可以自己更改。原本下面有一个输入a退出的按钮但没有反应,所以我删掉了它。
再到之后就是关闭数据流,关闭摄像头操作。因为博主没法直接读取数据流不能直接视频显示,没法得知这个数据是实时更新图像还是一次整体运行获取一次图像信息,所以我的方法是整体运行关闭一次采集一次数据,非常麻烦。

代码:

# -- coding: utf-8 --
from os import times
import cv2
import sys
import numpy as np
import time
from ctypes import *sys.path.append("C:\Program Files (x86)\MVS\Development\Samples\Python\MvImport")
from MvCameraControl_class import *class HHV:def __init__(self,):self.init_cam()for i in range(10):st = time.time()img = self.get_image_array()print(img.shape)# cv2.imshow("img", img)# cv2.waitKey(0)# cv2.destroyAllWindows()print("st:", time.time()-st)self.exit_cam()      def get_image_array(self):self.save_image2local(index=0)img = cv2.imread("AfterConvert_RGB0.jpg")return imgdef init_cam(self,):deviceList = MV_CC_DEVICE_INFO_LIST()tlayerType = MV_GIGE_DEVICE | MV_USB_DEVICEret = MvCamera.MV_CC_EnumDevices(tlayerType, deviceList)nConnectionNum = 0# ch:创建相机实例 | en:Creat Camera Objectself.cam = MvCamera()# ch:选择设备并创建句柄 | en:Select device and create handlestDeviceList = cast(deviceList.pDeviceInfo[int(nConnectionNum)], POINTER(MV_CC_DEVICE_INFO)).contentsret = self.cam.MV_CC_CreateHandle(stDeviceList)        # ch:打开设备 | en:Open deviceret = self.cam.MV_CC_OpenDevice(MV_ACCESS_Exclusive, 0)# ch:设置触发模式为off | en:Set trigger mode as offret = self.cam.MV_CC_SetEnumValue("TriggerMode", MV_TRIGGER_MODE_OFF)        # ch:获取数据包大小 | en:Get payload sizestParam = MVCC_INTVALUE()memset(byref(stParam), 0, sizeof(MVCC_INTVALUE))ret = self.cam.MV_CC_GetIntValue("PayloadSize", stParam)self.nPayloadSize = stParam.nCurValue    def save_image2local(self, index=0):# ch:开始取流 | en:Start grab imageret = self.cam.MV_CC_StartGrabbing()stDeviceList = MV_FRAME_OUT_INFO_EX()memset(byref(stDeviceList), 0, sizeof(stDeviceList))self.data_buf = (c_ubyte * self.nPayloadSize)()ret = self.cam.MV_CC_GetOneFrameTimeout(byref(self.data_buf), self.nPayloadSize, stDeviceList, 1000)if ret == 0:# print ("get one frame: Width[%d], Height[%d], nFrameNum[%d]" % (stDeviceList.nWidth, stDeviceList.nHeight, stDeviceList.nFrameNum))nRGBSize = stDeviceList.nWidth * stDeviceList.nHeight * 3stConvertParam=MV_SAVE_IMAGE_PARAM_EX()stConvertParam.nWidth = stDeviceList.nWidthstConvertParam.nHeight = stDeviceList.nHeightstConvertParam.pData = self.data_bufstConvertParam.nDataLen = stDeviceList.nFrameLenstConvertParam.enPixelType = stDeviceList.enPixelTypestConvertParam.nImageLen = stConvertParam.nDataLenstConvertParam.nJpgQuality = 70stConvertParam.enImageType = MV_Image_JpegstConvertParam.pImageBuffer = (c_ubyte * nRGBSize)()stConvertParam.nBufferSize = nRGBSize# ret = self.cam.MV_CC_ConvertPixelType(stConvertParam)# print(stConvertParam.nImageLen)ret = self.cam.MV_CC_SaveImageEx2(stConvertParam)if ret != 0:print ("convert pixel fail ! ret[0x%x]" % ret)del self.data_bufsys.exit()file_path = "AfterConvert_RGB"+str(index)+".jpg"file_open = open(file_path.encode('ascii'), 'wb+')img_buff = (c_ubyte * stConvertParam.nImageLen)()cdll.msvcrt.memcpy(byref(img_buff), stConvertParam.pImageBuffer, stConvertParam.nImageLen)file_open.write(img_buff)# print ("Save Image succeed!")def exit_cam(self,):# ch:停止取流 | en:Stop grab imageret = self.cam.MV_CC_StopGrabbing()if ret != 0:print ("stop grabbing fail! ret[0x%x]" % ret)del self.data_bufsys.exit()# ch:关闭设备 | Close deviceret = self.cam.MV_CC_CloseDevice()if ret != 0:print ("close deivce fail! ret[0x%x]" % ret)del self.data_bufsys.exit()# ch:销毁句柄 | Destroy handleret = self.cam.MV_CC_DestroyHandle()if ret != 0:print ("destroy handle fail! ret[0x%x]" % ret)del self.data_bufsys.exit()del self.data_bufif __name__ == "__main__":hhv = HHV()

海康工业相机Python调用实现连续实时拍照相关推荐

  1. 海康工业相机Python调用实现拍照

    条件:Python+海康官方的mvs文件下的development/samples下的python文件夹 注意:相机连接后不要用官方app打开相机,不然python代码检测不到设备,代码在pychar ...

  2. 海康工业相机 python 图像数据转opencv格式

    python调用海康工业相机,官方给出的SDK里没有转到opencv格式的例子,网上找了下,只有一篇,转换部分的代码如下: temp = np.asarray(pData2) # 将c_ubyte_A ...

  3. python调用海康工业相机并用opencv显示(整体实现)

    python语言调用海康机器人(hikrobotics)工业相机 系列文章目录 第一章 python调用海康工业相机并用opencv显示(整体实现) 第二章 python 调用海康工业相机图像获取方式 ...

  4. Opencv如何打开使用海康工业相机

    文章转载:python语言下使用opencv接口cv2.VideoCapture()接口调用海康机器人工业相机 一.Opencv接口 使用 opencv 的官方接口 VideoCapture() 接口 ...

  5. 海康工业相机的使用遇到的一些问题

    2021-5.24 现在是测试软件的稳定性,我就一直打开相机,发现6个机位同时显示,在检测缺陷到随缘数量的时候界面就会卡住.我最后检查出是网卡的缘故,我现在的电脑是双网卡的,我一个网口接了交换机,交换 ...

  6. 2022-05-16 Python OpenCV 海康工业相机

    背景 Python OpenCV连接海康工业相机做图像处理 环境 Python:3.9.9 OpenCV:4.5.5 numpy:1.19.3 2022-05-16_112138.png 相机 海康: ...

  7. 海康工业摄像头调用(linux基于python和opencv)

    1.下载官网客户端(其中包含SDK) 官方网站 海康机器人-机器视觉-下载中心 安装deb文件 sudo dpkg -i deb文件名 2.运行客户端 cd  /opt/MVS/bin/ ./MVS. ...

  8. (二)Qt多线程实现海康工业相机图像实时采集

    系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 文章目录 系列文章目录 ...

  9. (一)Qt+OpenCV调用海康工业相机SDK示例开发

    系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 文章目录 系列文章目录 ...

最新文章

  1. Matlab中fileter和conv的区别及卷积的计算方法
  2. Linux Kernel TCP/IP Stack — L2 Layer — Traffic Control(流量控制)的实现原理
  3. mysql 郝朝阳_秒级故障切换!用MHA轻松实现MySQL高可用(三)
  4. 《ASP.NET MVC企业实战》(二) MVC开发前奏
  5. 一招教你解决大数据量下的各种报表使用问题
  6. 前端的date类型后台接收_腾讯高级前端工程师支招,云开发实现小程序打赏和提现云开发实践...
  7. 【重温基础】2.流程控制和错误处理
  8. javafx 图标_JavaFX技巧32:需要图标吗? 使用Ikonli!
  9. Spring Cloud Alibaba —— Sentinel 详细使用
  10. python进程数据共享_python程序中的进程操作-进程间的数据共享
  11. c语言程序怎么打分数,用C语言编程平均分数
  12. read while循环 tar脚本
  13. js系列教程7-DOM操作全解
  14. 动画算计算机专业吗,能够定义角色功能的计算机动画系统属于。 (1.0分)
  15. EXCEL 保护工作表、工作薄不被破坏
  16. 阿里云数据库使用初体验
  17. coolfire文章之八
  18. 从全然不知到融会贯通 ——对小猿搜题手机APP的教学设计分析
  19. 浪潮java面经总结
  20. JS原创小游戏 旋转方块(源码)

热门文章

  1. 94款超级漂亮的box-shadow样式 复制即用
  2. MSP430G2553最小系统板(PCB)
  3. IGKBoard(imx6ull)-ADC编程MQ-2烟雾传感器采样
  4. python爬虫爬今日头条_GitHub - striver-ing/headlines_today: 基于Python的爬取今日头条文章及视频...
  5. 杜拉克的有效的管理者研究(1974)-zz
  6. NPU架构分析与应用
  7. 无线串口服务器连接plc,4G/5G无线PLC远程控制
  8. matlab带传动设计
  9. 校园一角 四年级计算机课,校园一角作文四年级
  10. facebook广告推广