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

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

相关推荐
云雾J视界1 天前
AI驱动半导体良率提升:基于机器学习的晶圆缺陷分类系统搭建
人工智能·python·机器学习·智能制造·数据驱动·晶圆缺陷分类
m0_748248021 天前
揭开 C++ vector 底层面纱:从三指针模型到手写完整实现
开发语言·c++·算法
海盗猫鸥1 天前
「C++」string类(2)常用接口
开发语言·c++
序属秋秋秋1 天前
《Linux系统编程之开发工具》【实战:倒计时 + 进度条】
linux·运维·服务器·c语言·c++·ubuntu·系统编程
朝凡FR1 天前
AIShareTxt入门:快速准确高效的为金融决策智能体提供股票技术指标上下文
python·ai编程
Q_Q5110082851 天前
python+django/flask的城市供水管网爆管预警系统-数据可视化
spring boot·python·django·flask·node.js·php
小白学大数据1 天前
增量爬取策略:如何持续监控贝壳网最新成交数据
爬虫·python·性能优化
@forever@1 天前
【JAVA】LinkedList与链表
java·python·链表
程序员爱钓鱼1 天前
Python编程实战:面向对象与进阶语法——类型注解与代码规范(PEP 8)
后端·python·ipython
程序员爱钓鱼1 天前
Python实战:用高德地图API批量获取地址所属街道并写回Excel
后端·python·ipython