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

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()

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

相关推荐
福尔摩斯张12 小时前
TCP协议深度解析:从报文格式到连接管理(超详细)
linux·c语言·网络·c++·笔记·网络协议·tcp/ip
桂花饼12 小时前
[首发实测] GPT-5.2 pro 接入指南:SWE-bench 80% 胜率的“工程级”模型,Python 如何实现低成本调用?
python·gpt·ai编程·大模型实战·gemini 3 pro·claude opus 4.5
LUU_7912 小时前
Day37 深入理解SHAP图
python
Croa-vo12 小时前
NVIDIA 2025 Deep Learning & Systems 岗位面试复盘 | C++并发与底层架构难度解析
c++·深度学习·面试
淼淼76312 小时前
Qt拖动工具栏控件到图页中均匀展示
开发语言·c++·windows·qt
李星星BruceL13 小时前
Pytest第三章(参考指南1)
python·自动化·pytest
乌萨奇也要立志学C++13 小时前
【洛谷】贪心专题之推公式 用 “相邻元素交换” 推导最优规则
c++·算法
哎呀呦呵13 小时前
pytest基本使用
python·pytest
阿关@13 小时前
Vscode中Python无法将pip/pytest”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
vscode·python·pip
Kristen_YXQDN13 小时前
PyCharm 中 pytest 运行 python 测试文件报错:D:\Python_file\.venv\Scripts\python.exe: No module named pytest
运维·开发语言·python·pycharm·pytest