目前缺芯的大环境也影响到工业相机上面了,使用支持国产海康机器人的工业相机进行视觉开发是不错的替代方案。价格交期很是感人呐!

参考文章python调用海康工业相机并用opencv显示(整体实现)
博主写的很全面非常好。
PyQt显示相机图像本文推荐另一种方法“将numpy array 先转化为 Pillow image 再转化为Pixmap” 并用来显示。
主要步骤:
(1)HikRobot 官网下载安装“机器视觉工业相机客户端MVS V3.3.1(Windows)”, 下载链接。
(2)安装后参考官网自带的Python demo, 默认安装文件夹为C:\Program Files (x86)\MVS\Development\Samples\Python
(3)下面的代码设置了相机的曝光时间、外触发Line0,以及查看曝光时间。另外外触发使用1.5V干电池触发没有反映,3V干电池就可以了。
后面就自己在UI里面增加控制相机和按钮了,多相机同样如此。
博主QQ 562604218 欢迎沟通交流。

import threading
from datetime import datetime
import cv2
import numpy as np
from PIL import Imagefrom PyQt5 import QtCore
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtWidgets import QLabel, QApplication, QWidget
from PyQt5.QtCore import Qt
from MvCameraControl_class import *class Mainwindow(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setObjectName("MainWindow")self.resize(800, 600)self.label1 = QLabel(self)self.label1.setAlignment(Qt.AlignCenter)self.label1.setGeometry(QtCore.QRect(70, 70, 561, 451))def closeEvent(self, event) -> None:# close camera# ch:停止取流 | en:Stop grab imageret = cam.MV_CC_StopGrabbing()if ret != 0:print("stop grabbing fail! ret[0x%x]" % ret)sys.exit()# ch:关闭设备 | Close deviceret = cam.MV_CC_CloseDevice()if ret != 0:print("close deivce fail! ret[0x%x]" % ret)sys.exit()# ch:销毁句柄 | Destroy handleret = cam.MV_CC_DestroyHandle()if ret != 0:print("destroy handle fail! ret[0x%x]" % ret)sys.exit()event.accept()  # close appprint('Exit success')class Getimage_save(threading.Thread):def __init__(self):super(Getimage_save, self).__init__()def run(self) -> None:stOutFrame = MV_FRAME_OUT()memset(byref(stOutFrame), 0, sizeof(stOutFrame))while True:ret = cam.MV_CC_GetImageBuffer(stOutFrame, 10000000)if None != stOutFrame.pBufAddr and 0 == ret:print("get one frame: Width[%d], Height[%d], nFrameNum[%d]" % (stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight, stOutFrame.stFrameInfo.nFrameNum))pData = (c_ubyte * stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight)()cdll.msvcrt.memcpy(byref(pData), stOutFrame.pBufAddr,stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight)data = np.frombuffer(pData, count=int(stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight),dtype=np.uint8)# image numpy arrayimage = data.reshape((stOutFrame.stFrameInfo.nHeight, stOutFrame.stFrameInfo.nWidth))print('image shape:', image.shape)# image_show = QImage(image, stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight, QImage.Format_Indexed8)# 显示图片h, w = main.label1.height(), main.label1.width()# 方式一 将numpy array 先转化为 Pillow image 再转化为Pixmapframe = Image.fromarray(image).toqpixmap().scaled(w, h)# 方式二 将numpy array 先转化为 QImage 再转化为Pixmap, 灰度图使用image.copy()# RGB picture#h, w = window.current_image_lb.height(), window.current_image_lb.width()#qimage = QImage(img, img.shape[1], img.shape[0], 3*img.shape[1], QImage.Format_RGB888)#frame = QPixmap.fromImage(qimage).scaled(w, h)# image_show = QImage(image.copy(), stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight,#                     QImage.Format_Indexed8)# frame = QPixmap.fromImage(image_show).scaled(w, h)# GUI 显示图片main.label1.setPixmap(frame)now = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')if not os.path.exists(f'C:/Packing_pic/{now[0:10]}'):os.makedirs(f'C:/Packing_pic/{now[0:10]}', exist_ok=True)cv2.imwrite(f"C:/Packing_pic/{now[0:10]}/{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.jpeg", image)# 将 pstFrame 内的数据指针权限进行释放cam.MV_CC_FreeImageBuffer(stOutFrame)if __name__ == '__main__':app = QApplication(sys.argv)main = Mainwindow()main.show()deviceList = MV_CC_DEVICE_INFO_LIST()tlayerType = MV_GIGE_DEVICE | MV_USB_DEVICE# ch:枚举设备 | en:Enum deviceret = MvCamera.MV_CC_EnumDevices(tlayerType, deviceList)print("Find %d devices!" % deviceList.nDeviceNum)cam_dict = {}for i in range(0, deviceList.nDeviceNum):mvcc_dev_info = cast(deviceList.pDeviceInfo[i], POINTER(MV_CC_DEVICE_INFO)).contentsif mvcc_dev_info.nTLayerType == MV_USB_DEVICE:  # USB camerastrSerialNumber = ""for per in mvcc_dev_info.SpecialInfo.stUsb3VInfo.chSerialNumber:if per == 0:breakstrSerialNumber = strSerialNumber + chr(per)print("user serial number: %s" % strSerialNumber)cam_dict[strSerialNumber] = icam_sn = ['00E53763769']# ch:创建相机实例 | en:Creat Camera Objectcam = MvCamera()# ch:选择设备并创建句柄 | en:Select device and create handlestDeviceList = cast(deviceList.pDeviceInfo[cam_dict[cam_sn[0]]], POINTER(MV_CC_DEVICE_INFO)).contentsret = cam.MV_CC_CreateHandle(stDeviceList)if ret != 0:print("create handle fail! ret[0x%x]" % ret)sys.exit()# ch:打开设备 | en:Open deviceret = cam.MV_CC_OpenDevice(MV_ACCESS_Exclusive, 0)if ret != 0:print("open device fail! ret[0x%x]" % ret)sys.exit()# ch:设置触发模式为on, 硬件触发 | en:Set trigger mode as oncam.MV_CC_SetEnumValue("TriggerMode", MV_TRIGGER_MODE_ON)# set Exposure_timecam.MV_CC_SetFloatValue("ExposureTime", 500.0)# get Exposure_timestFloatValue = MVCC_FLOATVALUE()memset(byref(stFloatValue), 0, sizeof(MVCC_FLOATVALUE))cam.MV_CC_GetFloatValue("ExposureTime", stFloatValue)print('Exposure_time:', stFloatValue.fCurValue)# set triggersource line0cam.MV_CC_SetEnumValue("TriggerSource", MV_TRIGGER_SOURCE_LINE0)# ch:开始取流 | en:Start grab imagecam.MV_CC_StartGrabbing()save_pic = Getimage_save()save_pic.setDaemon(True)save_pic.start()sys.exit(app.exec_())

效果图:

海康威视工业相机海康机器人 Python开发采集数据、保存照片PyQt显示相关推荐

  1. Basler 工业相机 Python开发采集数据、保存照片

    Python 安装pypylon 建议先下载pypylon轮子文件(下载地址),下载后Pip install 轮子文件, 安装即可. 注意不要用Python 3.8, pypylon 只能支持到Pyt ...

  2. Python 实现海康机器人工业相机 MV-CU060-10GM 的实时显示视频流及拍照功能

    一.背景介绍 1.最近项目中需要给客户对接海康机器人工业相机 MV-CU060-10GM: 2.客户要求通过部署的管理平台,可以在页面上实现如下功能: 1)相机视频流开始预览: 2)相机视频流停止预览 ...

  3. Linux环境中对海康威视工业相机SDK进行二次开发(QT+CMake+Opencv+海康SDK)

    关于在Windows环境中对海康威视工业相机SDK进行二次开发的话,可以参考这两篇博客. 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一) 海康威视工业相机SDK二 ...

  4. 海康机器人工业相机sdk简介

    海康机器人工业相机SDK获取与简单介绍 SDK下载 SDK组成 1.头文件 2.静态库/lib库 3.动态库 4.开发文档 5.示例程序 SDK下载 在海康机器人的官网下载中心-> 海康机器人下 ...

  5. MS VS+HIK海康机器人工业相机环境配置

    MS VS+HIK海康机器人工业相机环境配置 一.配置之前的准备工作 二 .配置环境 1.系统环境变量配置 2.项目属性配置 三.环境验证 一.配置之前的准备工作 在具体配置之前,务必下载安装好所需文 ...

  6. 海康机器人工业相机常用参数功能设置与获取(持续更新全-C语言)

    海康机器人工业相机常用参数功能设置与获取(C语言) 前言 相机属性树 1.设备控制/DeviceControl 1.1相机序列号获取/DeviceSerialNumber 1.2相机自定义命名设置与获 ...

  7. 海康机器人图像采集卡安装与使用

    海康机器人图像采集卡安装与使用 1.安装环境要求 1.1主板硬件配置需求 1.2软件安装 1.2.1 MVS软件安装 2.软件使用 2.1枚举相机,取流 3.软件SDK二次开发 3.1基于工业相机SD ...

  8. 深思数盾助力海康机器人,全新VM4.2乘风破浪,安全起航

    2022年3月28日,海康机器人机器视觉新技术及新品全球发布会盛大召开,圆满落幕.会上发布了全系列机器视觉新品,工业相机.智能相机.3D相机等重磅硬件产品,带来升级版的VM4.2软件,开启了机器视觉赋 ...

  9. 美团王兴将参与王慧文光年之外A轮投资;海康机器人拟募资60亿元创业板上市;赛富时启动2.5亿美元生成式AI基金丨每日大事件...

    ‍ ‍数据智能产业创新服务媒体 --聚焦数智 · 改变商业 企业动态 苹果新专利获批,自动驾驶汽车有效路况监控范围扩大到200米 3月7日,据美国商标和专利局(USPTO)公示的清单,苹果获得了41项 ...

最新文章

  1. MySQL中VARCHAR最大长度是多少?CHAR和VARCHAR有哪些区别?
  2. XSLT - 利用template实现for循环
  3. 浅析TCP之SACK(选择性确认)
  4. 如果你的船不进来,就游出去迎接它 乔纳森温特斯
  5. 使用Spring Security在Spring Boot中进行缓存
  6. AOP如何实现及实现原理
  7. 网易 html5,今天网易刷屏的这个H5,到底有多猛?
  8. 我们雇佣了一只大猴子
  9. SAN存储与协议,了解SCSI、FC和ISCSI
  10. 猫眼电影爬虫(参考崔大的书写的)
  11. 220v降压成5v电路图-220v降压5v简单电路
  12. 学生网页设计成品展示 静态HTML网页设计HTML5 dreamweaver作品展示2022.08期
  13. C#面试经历分享(好好看,好好学)
  14. 照片太大了怎么改小kb?图片压缩在线处理方法
  15. 从软件工程师到IT猎头:说说跳槽那点事
  16. 【C语言、C++基础编程题】【基础类题集】【平顶山学院ACM算法攻关部】
  17. javaweb第三天JavaScript知识点(来自广陵散老师)
  18. 登陆验证码图片不显示解决办法
  19. Wi-Fi Mesh网络技术
  20. (转载)NB-IoT和eMTC异同

热门文章

  1. 石油产量预测文献调研
  2. 总结:Prometheus存储
  3. Sample Codes之Query features from a FeatureLayer
  4. 截图翻译的方法有哪些
  5. canoe的下载安装【亲测】
  6. 文件:jquery.min.js
  7. 华为mate20 pro Android,华为mate20和mate20pro区别 华为Mate20和Mate20pro对比
  8. 基于云端的智能视频监控系统的设计与实现
  9. 层次分析法(AHP)的初步理解(清风建模学习笔记)
  10. app地推方案 地推活动策划方案 地推方案怎么写 地推吸粉方案