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

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

相关推荐
闭着眼睛学算法10 分钟前
【双机位A卷】华为OD笔试之【模拟】双机位A-新学校选址【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
卿摆摆20 分钟前
【C++】string的模拟实现
开发语言·c++
Dxy123931021623 分钟前
python如何使用nacos
开发语言·网络·python
ARM+FPGA+AI工业主板定制专家32 分钟前
基于JETSON ORIN/RK3588+AI相机:机器人-多路视觉边缘计算方案
人工智能·数码相机·机器人
玫瑰花店35 分钟前
C++速通Lambda表达式
开发语言·c++
C嘎嘎嵌入式开发1 小时前
(20)100天python从入门到拿捏《JSON 数据解析》
开发语言·python·json
jie*1 小时前
小杰深度学习(fourteen)——视觉-经典神经网络——ResNet
人工智能·python·深度学习·神经网络·机器学习·tensorflow·lstm
jie*1 小时前
小杰深度学习(sixteen)——视觉-经典神经网络——MobileNetV2
人工智能·python·深度学习·神经网络·tensorflow·numpy·matplotlib
CoderCodingNo1 小时前
【GESP】C++五级考试大纲知识点梳理, (3-4) 链表-双向循环链表
开发语言·c++·链表
colus_SEU2 小时前
【编译原理笔记】2.1 Programming Language Basics
c++·算法·编译原理