文章目录


1 常用计算机视觉库

(1)计算机视觉库 OpenCV

OpenCV 是 Intel? 开源计 算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API。它不依赖于其它的外部库 —— 尽管也可以使用某些外部库。 OpenCV 对非商业…

(2)人脸识别 faceservice.cgi

faceservice.cgi 是一个用来进行人脸识别的 CGI 程序, 你可以通过上传图像,然后该程序即告诉你人脸的大概坐标位置。faceservice 是采用 OpenCV 库进行开发的。

(3)OpenCVDotNet(OpenCV 的.NET 版 )

OpenCVDotNet 是一个 .NET 对 OpenCV 包的封装。

(4)人脸检测算法 jViolajones

jViolajones 是人脸检测算法 Viola-Jones 的一个 Java 实现,并能够加载 OpenCV XML 文件。 示例代码:http://www.oschina.net/code/snippet_12_2033

(5)Java 视觉处理库 JavaCV

JavaCV 提供了在计算机视觉领域的封装库,包括:OpenCV、ARToolKitPlus、libdc1394 2.x 、PGR FlyCapture 和 FFmpeg。此外,该工具可以很容易地使用 Java 平台的功能。 JavaCV 还带有硬件加速的全屏幕图像显示 (CanvasFrame),易于在多个内核中执行并行代码 (并…

(6)运动检测程序 QMotion

QMotion 是一个采用 OpenCV 开发的运动检测程序,基于 QT。

(7)视频监控系统 OpenVSS

OpenVSS - 开放平台的视频监控系统 - 是一个系统级别的视频监控软件视频分析框架 (VAF) 的视频分析与检索和播放服务,记录和索引技术。它被设计成插件式的支持多摄像头平台,多分析仪模块 (OpenCV 的集成),以及多核心架构。

(8)手势识别 hand-gesture-detection

手势识别,用 OpenCV 实现

(9)人脸检测识别 mcvai-tracking

提供人脸检测、识别与检测特定人脸 的功能,示例代码

1
2
3
cvReleaseImage( &gray ); 
cvReleaseMemStorage(&storage);
cvReleaseHaarClassifierCascade(&cascade);...
(10)人脸检测与跟踪库 asmlibrary

Active Shape Model Library (ASMLibrary?) SDK, 用 OpenCV 开发,用于人脸检测与跟踪。

(11)Lua 视觉开发库 libecv

ECV 是 lua 的计算机视觉开发库 (目前只提供 linux 支持)

(12)OpenCVSharp(OpenCV 的.Net 封装)

OpenCVSharp 是一个 OpenCV 的.Net wrapper,应用最新的 OpenCV 库开发,使用习惯比 EmguCV 更接近原始的 OpenCV,有详细的使用样例供参考。

(13)3D 视觉库 fvision2010

基于 OpenCV 构建的图像处理和 3D 视觉库。 示例代码:

1
2
3
4
ImageSequenceReaderFactory factory; 
ImageSequenceReader* reader = factory.pathRegex("c:/a/im_d.jpg", 0, 20);
//ImageSequenceReader* reader = factory.avi("a.avi");
if (reader == NULL) { ...
(14)基于 QT 的计算机视觉库 QVision

基于 QT 的面向对象的多平台计算机视觉库。可以方便的创建图形化应用程序,算法库主要从 OpenCV,GSL,CGAL,IPP,Octave 等高性能库借鉴而来。

(15)图像特征提取 cvBlob

cvBlob 是计算机视觉应用中在二值图像里寻找连通域的库。能够执行连通域分析与特征提取.

(16)实时图像 / 视频处理滤波开发包 GShow

GShow is a real-time image/video processing filter development kit. It successfully integrates DirectX11 with DirectShow framework. So it has the following features: GShow 是实时 图像 / 视频 处理滤波开发包,集成 DiretX11。…

(17)视频捕获 API VideoMan

VideoMan 提供一组视频捕获 API 。支持多种视频流同时输入 (视频传输线、USB 摄像头和视频文件等)。能利用 OpenGL 对输入进行处理,方便的与 OpenCV,CUDA 等集成开发计算机视觉系统。

(18)开放模式识别项目 OpenPR

Pattern Recognition project (开放模式识别项目),致力于开发出一套包含图像处理、计算机视觉、自然语言处理、模式识别、机器学习和相关领域算法的函数库。

(19)OpenCV 的 Python 封装 pyopencv

OpenCV 的 Python 封装, 主要特性包括: 提供与 OpenCV 2.x 中最新的 C 接口极为相似的 Python 接口,并且包括 C 中不包括的 C 接口 提供对 OpenCV 2.x 中所有主要部件的绑定:CxCORE (almost complete), CxFLANN (complete), Cv (complete), CvAux (C++ part almost…

(20)视觉快速开发平台 qcv

计算机视觉快速开发平台,提供测试框架,使开发者可以专注于算法研究。

(21)图像捕获 libv4l2cam

对函数库 v412 的封装,从网络摄像头等硬件获得图像数据,支持 YUYV 裸数据输出和 BGR24 的 OpenCV IplImage 输出

(22)计算机视觉算法 OpenVIDIA

OpenVIDIA projects implement computer vision algorithms running on on graphics hardware such as single or multiple graphics processing units(GPUs) using OpenGL, Cg and CUDA-C. Some samples will soon support OpenCL and Direct Compute API’…

(23)高斯模型点集配准算法 gmmreg

实现了基于混合高斯模型的点集配准 算法,该算法描述在论文: A Robust Algorithm for Point Set Registration Using Mixture of Gaussians, Bing Jian and Baba C. Vemuri. ,实现了 C++/Matlab/Python 接口…

(24)模式识别和视觉库 RAVL

Recognition And Vision Library (RAVL) 是一个通用 C++ 库,包含计算机视觉、模式识别等模块。

(25)图像处理和计算机视觉常用算法库 LTI-Lib

LTI-Lib 是一个包含图像处理和计算机视觉常用算法和数据结构的面向对象库,提供 Windows 下的 VC 版本和 Linux 下的 gcc 版本,主要包含以下几方面内容: 1、线性代数 2、聚类分析 3、图像处理 4、可视化和绘图工具

(26)OpenCV 优化 opencv-dsp-acceleration

优化了 OpenCV 库在 DSP 上的速度。

(27)C++ 计算机视觉库 Integrating Vision Toolkit

Integrating Vision Toolkit (IVT) 是一个强大而迅速的 C++ 计算机视觉库,拥有易用的接口和面向对象的架构,并且含有自己的一套跨平台 GUI 组件,另外可以选择集成 OpenCV

(28)计算机视觉和机器人技术的工具包 EGT

The Epipolar Geometry Toolbox (EGT) is a toolbox designed for Matlab (by Mathworks Inc.). EGT provides a wide set of functions to approach computer vision and robotics problems with single and multiple views, and with different vision se…

(29)OpenCV 的扩展库 ImageNets

ImageNets 是对 OpenCV 的扩展,提供对机器人视觉算法方面友好的支持,使用 Nokia 的 QT 编写界面。

(30)libvideogfx

视频处理、计算机视觉和计算机图形学的快速开发库。

(31)Matlab 计算机视觉包 mVision

Matlab 的计算机视觉包,包含用于观察结果的 GUI 组件,貌似也停止开发了,拿来做学习用挺不错的。

(32)Scilab 的计算机视觉库 SIP

SIP 是 Scilab (一种免费的类 Matlab 编程环境) 的图像处理和计算机视觉库。SIP 可以读写 JPEG/PNG/BMP 格式的图片。具备图像滤波、分割、边缘检测、形态学处理和形状分析等功能。

(33)STAIR Vision Library

STAIR Vision Library (SVL) 最初是为支持斯坦福智能机器人设计的,提供对计算机视觉、机器学习和概率统计模型的支持。

2 Python 计算机视觉库

一、python 计算机视觉中常用的库

一般我们在处理计算机视觉任务时会同时调用多种库,初学者在复现论文中的代码时往往会不知所措,不明白各种库的作用。这里笔者简单介绍一下自己平时在处理计算机视觉任务时的是如何将这些库函数与我们的计算机视觉任务进行关联,不足之处也请各位可以指出。
计算机视觉任务需要调用的库大致可分为三类: 图像处理类 (PIL、OpenCV、Matplotlib 等), 数学类 (Numpy), 神经网络类 (Tensorflow、Pytorch 等)。首先,我们通过调用图像处理类的库函数,进行图像处理的基本操作,例如:图像读取、颜色空间变换、以及常用的图像处理算法。然后,当你需要实现自己的图像处理算法时,需要将图像数据类型转换为数组类型进行运算,这时候需要使用数学类的库函数。最后,使用神经网络时,则需要将数组类型的数据转换到张量类型。

(一)PIL(Python Image Library)图像处理库
(二)Matplotlib
(三)Numpy
(四)Pytorch
(五)torchvision
(六)SKimage
(七)OpenCV

二、基本操作
(一)利用 PIL 读取图像数据
1
2
3
4
5
from PIL import Image

imgPath = "F:/path/test.png"#图像路径
img = Image.open(imgPath) #读取图像,保存为PIL.Image类型,默认为RGB格式
#<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1728x2304 at 0x241C742AA90>
(二)使用 Matplotlib 显示图像
1
2
3
4
import matplotlib.pyplot as plt
plt.imshow(img)#plt.imshow()函数负责对图像进行处理,并显示其格式,但是不能显示图像内容。
plt.axis('off')#显示的图像不展示轴线
plt.show() #显示图像内容
(三)PIL 类型与 Numpy 类型转换
1
2
3
import numpy as np
img = np.array(img)#将PIL.Image类型转换为np类型
img = Image.fromarray(img.astype('uint8'))#将np类型转换为PIL.Image类型
(四) Numpy 类型与 torch 类型互换
1
2
3
import torch
img = torch.from_numpy(img).float()#将np类型转换为张量
img = img.numpy()#将张量转换为np类型
(五)保存张量为图像
1
2
3
4
import torchvision

imgPath = "F:/path/test.png"
torchvision.utils.save_image(img,imgPath)
三、常用的函数
(一)打开图像,返回张量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from PIL import Image
import numpy as np
import torch

from PIL import Image
import numpy as np
import torch

#输入图片路径,返回四维张量
def openImage(path, w=-1, h=-1, mode='RGB'):
img = Image.open(path) #打开路径下的图片,保存维PIL.Image类型
if(w==-1):
w,_ = img.size
if(h==-1):
_,h = img.size
img = img.resize((w,h),Image.ANTIALIAS)#修改图像尺寸
img = img.convert(mode) #转换颜色空间
img = np.array(img) #将Image类型转换维Numpy类型
img = img/255.0 #将图像进行归一化
img = torch.from_numpy(img).float() #将Numpy类型转换维张量
d = img.dim()
if(d==2):
img = img.unsqueeze(0).unsqueeze(0)
elif(d==3):
img = img.permute(2,0,1) #更换维度,因为Image表示通道在第三维,变为张量后转换到第一维
img = img.unsqueeze(0) #增加维度
return img
(二)显示使用张量表示的图像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from PIL import Image
import numpy as np
import torch
import matplotlib.pyplot as plt

#输入一个四维张量,转换为PIL格式后显示
def showImage(img, mode='RGB'):
_,c,_,_ = img.size() #获取img的尺寸
if(c==1): #判断是否为单通道
img = img[0][0]
else:
img = img[0]
img = img.permute(1,2,0)
img = img.numpy() #将张量转换为np数组
img = img*255.0
img = Image.fromarray(img.astype('uint8')).convert(mode)#将np数组转换为PIL类型
plt.imshow(img)
plt.axis('off')
plt.show()
(三)保存张量为图像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from PIL import Image
import numpy as np
import torch
import matplotlib.pyplot as plt

#输入一个四维张量,转换为PIL格式后保存
def saveImage(img,path,mode='RGB'):
_,c,_,_ = img.size() #获取img的尺寸
if(c==1): #判断是否为单通道
img = img[0][0]
elif(c==3):
img = img[0]
img = img.permute(1,2,0)
img = img.numpy() #将张量转换为np数组
img = img*255.0
img = Image.fromarray(img.astype('uint8')).convert(mode)#将np数组转换为PIL类型
img.save(path)

3 常用十大图像处理算法库

当今世界充满了各种数据,而图像是其中高的重要组成部分。然而,若想其有所应用,我们需要对这些图像进行处理。图像处理是分析和操纵数字图像的过程,旨在提高其质量或从中提取一些信息,然后将其用于某些方面。

图像处理中的常见任务包括显示图像,基本操作(如裁剪、翻转、旋转等),图像分割,分类和特征提取,图像恢复和图像识别等。 Python 之成为图像处理任务的最佳选择,是因为这一科学编程语言日益普及,并且其自身免费提供许多最先进的图像处理工具。

让我们看一下用于图像处理任务的一些常用 Python 库。

(1)scikit Image

scikit-image 是一个基于 numpy 数组的开源 Python 包。 它实现了用于研究、教育和工业应用的算法和实用程序。 即使是对于那些刚接触 Python 的人,它也是一个相当简单的库。 此库代码质量非常高并已经过同行评审,是由一个活跃的志愿者社区编写的。

使用说明文档

https://scikit-image.org/docs/stable/user_guide.html

用法举例 :图像过滤、模版匹配

可使用 “skimage” 来导入该库。大多数功能都能在子模块中找到。

1
2
3
4
5
6
import matplotlib.pyplot as plt
%matplotlib inline
from skimage import data,filters
image = data.coins()# ... or any other NumPy array!
edges = filters.sobel(image)
plt.imshow(edges, cmap='gray')

img

模版匹配(使用 match_template 函数)

img

gallery 上还有更多例子。

https://scikit-image.org/docs/dev/auto_examples/

(2)Numpy

Numpy 是 Python 编程的核心库之一,支持数组结构。 图像本质上是包含数据点像素的标准 Numpy 数组。 因此,通过使用基本的 NumPy 操作 —— 例如切片、脱敏和花式索引,可以修改图像的像素值。 可以使用 skimage 加载图像并使用 matplotlib 显示。

使用说明文档

http://www.numpy.org/

用法举例 :使用 Numpy 来对图像进行脱敏处理

1
2
3
4
5
6
7
8
9
10
import numpy as np
from skimage import data
import matplotlib.pyplot as plt
%matplotlib inline
image = data.camera()
type(image)
numpy.ndarray #Image is a numpy array
mask = image < 87
image[mask]=255
plt.imshow(image, cmap='gray')
img
(3)Scipy

scipy 是 Python 的另一个核心科学模块,就像 Numpy 一样,可用于基本的图像处理和处理任务。值得一提的是,子模块 scipy.ndimage 提供了在 n 维 NumPy 数组上运行的函数。 该软件包目前包括线性和非线性滤波、二进制形态、B 样条插值和对象测量等功能。

使用说明文档

https://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html#correlation-and-convolution

用法举例 :使用 SciPy 的高斯滤波器对图像进行模糊处理

1
2
3
4
from scipy import misc,ndimage
face = misc.face()
blurred_face = ndimage.gaussian_filter(face, sigma=3)
very_blurred = ndimage.gaussian_filter(face, sigma=5)#Resultsplt.imshow()
img
(4)PIL/ Pillow

PIL (Python Imaging Library)是一个免费的 Python 编程语言库,它增加了对打开、处理和保存许多不同图像文件格式的支持。 然而,它的发展停滞不前,其最后一次更新还是在 2009 年。幸运的是, PIL 有一个正处于积极开发阶段的分支 Pillow,它非常易于安装。Pillow 能在所有主要操作系统上运行并支持 Python 3。该库包含基本的图像处理功能,包括点操作、使用一组内置卷积内核进行过滤以及颜色空间转换。

使用说明文档

https://pillow.readthedocs.io/en/3.1.x/index.html

用法举例 :使用 ImageFilter 增强 Pillow 中的图像

1
2
3
4
5
6
from PIL import Image, ImageFilter#Read image
im = Image.open( 'image.jpg' )#Display image
im.show()
from PIL import ImageEnhance
enh = ImageEnhance.Contrast(im)
enh.enhance(1.8).show("30% more contrast")
img
(5)OpenCV-Python

OpenCV( 开源计算机视觉库,Open Source Computer Vision Library)是计算机视觉应用中使用最广泛的库之一。OpenCV-Python 是 OpenCV 的 python API。 OpenCV-Python 不仅速度快(因为后台由用 C / C ++ 编写的代码组成),也易于编码和部署(由于前端的 Python 包装器)。 这使其成为执行计算密集型计算机视觉程序的绝佳选择。

使用说明文档

https://github.com/abidrahmank/OpenCV2-Python-Tutorials

用法举例 :使用 Pyramids 创建一个名为’Orapple’的新水果的功能

img
(6)SimpleCV

SimpleCV 也是用于构建计算机视觉应用程序的开源框架。 通过它可以访问如 OpenCV 等高性能的计算机视觉库,而无需首先了解位深度、文件格式或色彩空间等。学习难度远远小于 OpenCV,并且正如他们的标语所说,“它使计算机视觉变得简单”。支持 SimpleCV 的一些观点是:

即使是初学者也可以编写简单的机器视觉测试

摄像机、视频文件、图像和视频流都可以交互操作

使用说明文档

https://simplecv.readthedocs.io/en/latest/

用法举例

img
(7)Mahotas

Mahotas 是另一个用于 Python 的计算机视觉和图像处理库。 它包含传统的图像处理功能(如滤波和形态学操作)以及用于特征计算的更现代的计算机视觉功能(包括兴趣点检测和局部描述符)。 该接口使用 Python,适用于快速开发,但算法是用 C ++ 实现的,并且针对速度进行了优化。Mahotas 库运行很快,它的代码很简单,(对其它库的)依赖性也很小。 建议阅读他们的官方文档以了解更多内容。

使用说明文档

https://mahotas.readthedocs.io/en/latest/install.html

用法举例

Mahotas 库使用简单的代码来完成工作。 对于 “寻找 Wally” 的问题,Mahotas 完成的得很好,而且代码量非常小。

img
img
(8)SimpleITK

ITK(Insight Segmentation and Registration Toolkit)是一个开源的跨平台系统,为开发人员提供了一整套用于图像分析的软件工具。 其中, SimpleITK 是一个建立在 ITK 之上的简化层,旨在促进其在快速原型设计、教育以及脚本语言中的使用。SimpleITK 是一个包含大量组件的图像分析工具包,支持一般的过滤操作、图像分割和配准。 SimpleITK 本身是用 C++ 编写的,但可用于包括 Python 在内的大量编程语言。

使用说明文档

https://github.com/hhatto/pgmagick

这里有大量说明了如何使用 SimpleITK 进行教育和研究活动的 Jupyter notebook。notebook 中演示了如何使用 SimpleITK 进行使用 Python 和 R 编程语言的交互式图像分析。

用法举例

下面的动画是使用 SimpleITK 和 Python 创建的可视化的严格 CT / MR 配准过程。

img

(9)pgmagick

pgmagick 是 GraphicsMagick 库基于 Python 的包装器。GraphicsMagick 图像处理系统有时被称为图像处理的瑞士军刀。它提供了强大而高效的工具和库集合,支持超过 88 种主要格式图像的读取、写入和操作,包括 DPX,GIF,JPEG,JPEG-2000,PNG,PDF,PNM 和 TIFF 等重要格式。

使用说明文档

https://github.com/hhatto/pgmagick

用法举例 :图片缩放、边缘提取

img
边缘提取
(10)Pycairo

Pycairo 是图形库 cairo 的一组 python 绑定。 Cairo 是一个用于绘制矢量图形的 2D 图形库。 矢量图形很有趣,因为它们在调整大小或进行变换时不会降低清晰度。Pycairo 库可以从 Python 调用 cairo 命令。

使用说明文档

https://github.com/pygobject/pycairo

用法 :Pycairo 可以绘制线条、基本形状和径向渐变

img
× 请我吃糖~
打赏二维码