代替Spinnaker 的 POINTGREY工业级相机 FLIR相机 Python编程案例

ops/2024/11/25 16:59:07/

SpinnakerSDK_FULL_4.0.0.116_x64 是一个用于FLIR相机的SDK,主要用于图像采集和处理。Spinnaker SDK主要提供C++接口,无法直接应用在python环境。本文则基于Pycharm2019+python3.7的环境下,调用opencv,EasySpin,PySpin,的库实现POINTGREY工业级相机的开发。

1.Spinnaker SDK
首先,需要去Spinnaker SDK | Teledyne FLIR官网上下载相应的SDK

选择WINDOWS,解压得到一下文件

 下载Latest Spinnaker Full SDK中的SDK

下载完成后打开SpinView查看是否有用(之前想做FlyCapture但是FlyCapture打不开)

2.Pycharm+Python的环境(可自行配置)
3.EasyPySpin库
        在查找相关资料的时候在git-hub上找到了一个库,该库能够实现用opencv的方式调用Spinnaker的摄像头方便后续的图像处理。
elerac/EasyPySpin: cv2.VideoCapture like wrapper for FLIR Spinnaker SDK (github.com)
https://github.com/elerac/EasyPySpin

        相关使用说明在其中,在Pycharm中能够通过Seting搜索

         进行下载

4.PySpin
        如果只调用EasyPySpin的库直接运行程序,会提示缺少PySpin的库函数因此需要安装PySpin库,该库不能通过setting进行安装需要

利用 Latest Python Spinnaker中的whl文件进行安装

选择对应版本的Spin(其中cp是对应python的版本)

然后安装whl的文件

使用pip install 文件名.whl 

5.运行Example程序
"""A simple example of capturing and displaying an image
"""
import EasyPySpin
import cv2
def main():
    cap = EasyPySpin.VideoCapture(0)
 
    if not cap.isOpened():
        print("Camera can't open\nexit")
        return -1
 
    cap.set(cv2.CAP_PROP_EXPOSURE, -1)  # -1 sets exposure_time to auto
    cap.set(cv2.CAP_PROP_GAIN, -1)  # -1 sets gain to auto
 
    while True:
        ret, frame = cap.read()
        # frame = cv2.cvtColor(frame, cv2.COLOR_BayerBG2BGR)  # for RGB camera demosaicing
 
        img_show = cv2.resize(frame, None, fx=0.25, fy=0.25)
        cv2.imshow("press q to quit", img_show)
        key = cv2.waitKey(30)
        if key == ord("q"):
            break
 
    cap.release()
    cv2.destroyAllWindows()
 
 
if __name__ == "__main__":
    main()

结果如下:

"""A simple example of capturing and displaying an image
"""
import EasyPySpin
import cv2
import numpy as np
import math
import copy
 
 
 
def main():
    cap = EasyPySpin.VideoCapture(0)
 
    if not cap.isOpened():
        print("Camera can't open\nexit")
        return -1
    frameNum = 0
 
    cap.set(cv2.CAP_PROP_EXPOSURE, -1)  # -1 sets exposure_time to auto 自动曝光时间
    cap.set(cv2.CAP_PROP_GAIN, -1)  # -1 sets gain to auto              自动增益
 
    while True:
        ret, frame = cap.read()
        # frame = cv2.cvtColor(frame, cv2.COLOR_BayerBG2BGR)  # for RGB camera demosaicing
        frameNum += 1
        if ret == True:
            tempframe = frame
            if (frameNum == 1):
                previousframe = frame
                print(111)
            if (frameNum >= 2):
                currentframe = tempframe
                currentframe = cv2.absdiff(currentframe, previousframe) #帧差法图
 
                median = cv2.medianBlur(currentframe, 3)  #中值滤波
 
                ret, threshold_frame = cv2.threshold(currentframe, 20, 255, cv2.THRESH_BINARY)
                gauss_image = cv2.GaussianBlur(threshold_frame, (3 ,3), 0)
                contours, hierarchy = cv2.findContours(threshold_frame, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 
                yuantu_show = cv2.resize(frame, None, fx=0.25, fy=0.25)
                intital_show = cv2.resize(frame, None, fx=0.25, fy=0.25)
                img_show = cv2.resize(gauss_image, None, fx=0.25, fy=0.25)
 
                # 画出矩形轮廓
                for i in range(0, len(contours)):
                    x, y, w, h = cv2.boundingRect(contours[i])
                    cv2.rectangle(yuantu_show, (x, y), (x + w, y + h), (255, 255, 0), 2)
 
 
 
 
                #图片显示
                cv2.imshow('yuantu', intital_show)
                cv2.imshow('lunkou', yuantu_show)  # 原图显示
                #cv2.imshow('tuxiangchuli', img_show) # 经过高斯滤波之后
                #cv2.imshow('lvbo', median)
 
                #时间延迟
                key = cv2.waitKey(30)
 
                #按q退出
                if key == ord("q"):
                    break
    #释放内存
    cap.release()
    cv2.destroyAllWindows()
 
 
if __name__ == "__main__":
    main()

利用帧差法进行视频的图像处理

 


http://www.ppmy.cn/ops/136626.html

相关文章

【机器学习】超简明Python基础教程

Python是一种简单易学、功能强大的编程语言,适用于数据分析、人工智能、Web开发、自动化脚本等多个领域。本教程面向零基础学习者,逐步讲解Python的基本概念、语法和操作。 1. 安装与运行 安装Python 从官网 Welcome to Python.org 下载适合自己系统的…

机器翻译 数据集 (NLP基础 - 预处理 → tokenize → 词表 → 截断/填充 → 迭代器) + 代码实现 —— 笔记3.9《动手学深度学习》

目录 0. 前言 1. 下载和预处理数据集 2. 词元化 (tokenize) 3. 词表 (Vocab) 4. 加载数据集 (填充/截断) 5. 迭代器 (iterator) 6. 小结 0. 前言 课程全部代码(pytorch版)已上传到附件本章节为原书第9章(现代循环网络),共分为8节&…

计算机网络实验 DNS协议分析与测量

1. 实验目的 了解互联网的域名结构、域名系统DNS及其域名服务器的基本概念 熟悉DNS协议及其报文基本组成、DNS域名解析原理 掌握常用DNS测量工具dig使用方法和DNS测量的基本技术 2. 实验环境 硬件要求:阿里云云主机ECS 一台。 软件要求:Linux/ Wind…

【SpringBoot】 数据库查询超时配置

文章目录 1. 简介1.1 介绍数据库超时配置的重要性1.2 概述Spring Boot在数据库连接中的应用 2. 配置文件层面处理超时2.1 Spring Boot数据库连接的基本配置2.2 常用的数据库连接池HikariCP如何在Spring Boot中配置HikariCPHikariCP的关键超时参数 Tomcat JDBC PoolDruid连接池关…

Unity3D基于ECS的游戏逻辑线程详解

前言 Unity3D是一款非常流行的游戏开发引擎,其采用的是组件实体系统(ECS)架构,这种架构可以让游戏开发者更加高效地管理游戏逻辑线程。本文将详细介绍Unity3D基于ECS的游戏逻辑线程,并给出技术详解以及代码实现。 对…

Go消费kafka中kafkaReader.FetchMessage(ctx)和kafkaReader.ReadMessage(ctx)的区别

在Go语言的Kafka消费中,kafkaReader.FetchMessage(ctx) 和 kafkaReader.ReadMessage(ctx) 都是用来从Kafka中消费消息的,但它们的用法和功能有一些细微的区别。以下是两者的主要区别: 1. FetchMessage(ctx) 功能:FetchMessage 从…

nohup java -jar supporterSys.jar --spring.profiles.active=prod

文章目录 1、ps -ef | grep java2、kill 13713、ps -ef | grep java4、nohup java -jar supporterSys.jar --spring.profiles.activeprod &5、ps -ef | grep java1. 启动方式进程 1371进程 19994 2. 主要区别3. 可能的原因4. 建议 1、ps -ef | grep java rootshipper:~# p…

Java开发经验——SpringRestTemplate常见错误

摘要 本文分析了在使用Spring框架的RestTemplate发送表单请求时遇到的常见错误。主要问题在于将表单参数错误地以JSON格式提交,导致服务器无法正确解析参数。文章提供了错误案例的分析,并提出了修正方法。 1. 表单参数类型是MultiValueMap RestControl…