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

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

相关推荐
Forget the Dream27 分钟前
设计模式之责任链模式
java·c++·设计模式·责任链模式
停止重构28 分钟前
【开源】低代码 C++程序框架,Linux多线程程序
c++·低代码·多线程·开源框架·云计算引擎
Duramentee31 分钟前
C++ 设计模式 十二:责任链模式 (读书 现代c++设计模式)
c++·设计模式·责任链模式
紫雾凌寒33 分钟前
计算机视觉 |解锁视频理解三剑客——TimeSformer
python·深度学习·神经网络·计算机视觉·transformer·timesformer
_GR36 分钟前
Qt开发⑧Qt的窗口_下_浮动窗口+对话框
开发语言·css·c++·qt·microsoft
萌の鱼1 小时前
leetcode 3183. 达到总和的方法数量
数据结构·c++·算法·leetcode
程序员杰哥1 小时前
测试用例详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
Forget the Dream1 小时前
设计模式之代理模式
java·c++·设计模式·代理模式
攻城狮7号4 小时前
【第十节】C++设计模式(结构型模式)-Flyweight( 享元)模式
c++·设计模式·享元模式
Forget the Dream4 小时前
设计模式之享元模式
java·c++·设计模式·享元模式