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

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

相关推荐
这里有鱼汤7 分钟前
“对象”?对象你个头!——Python世界观彻底崩塌的一天
后端·python
尘浮72817 分钟前
60天python训练计划----day59
开发语言·python
wh393320 分钟前
使用Python将PDF转换成word、PPT
python·pdf·word
船长@Quant37 分钟前
数学视频动画引擎Python库 -- Manim Voiceover 语音服务 Speech Services
python·数学·manim·动画引擎·语音旁白
2401_881244401 小时前
牛客周赛99
c++
好开心啊没烦恼2 小时前
Python 数据分析:计算,分组统计1,df.groupby()。听故事学知识点怎么这么容易?
开发语言·python·数据挖掘·数据分析·pandas
lljss20203 小时前
Python11中创建虚拟环境、安装 TensorFlow
开发语言·python·tensorflow
空中湖3 小时前
tensorflow武林志第二卷第九章:玄功九转
人工智能·python·tensorflow
山登绝顶我为峰 3(^v^)34 小时前
如何录制带备注的演示文稿(LaTex Beamer + Pympress)
c++·线性代数·算法·计算机·密码学·音视频·latex
CodeCraft Studio4 小时前
CAD文件处理控件Aspose.CAD教程:使用 Python 将绘图转换为 Photoshop
python·photoshop·cad·aspose·aspose.cad