CV:基本概念和工具

计算机视觉

计算机视觉, 就是给计算机安装上眼睛(照相机)和大脑(算法),让计算机能够感知环境。计算机视觉的很多算法,都与机器学习、深度学习这些人工智能的算法相同,下面的图很形象地表示除了这种概念的从属关系。
在这里插入图片描述

像素,颜色,通道,图像和颜色空间的概念

计算机的三原色是红色绿色和蓝色。
RGB颜色表:https://www.rapidtables.com/web/color/RGB_Color.html
图像的分辨率(resolution):
例如一个8001200的图像,通常是指这个图像网格有800列,1200行,共8001200=960000个像素。具体这个图像有多大,取决于像素点有多大,或者说叫做PPI(pixels per inch)的设置,通常PPI都在200-400的范围内。
例如8001200像素的图片,大小是46inch,那么这个图像的PPI就是200

图像文件后缀

windows 位图: .bmp, .dib
JPEG文件:.jpeg, .jpg, .jpe
JPEG 2000文件: .jp2
portable network graphics: .png
portable image format: .pbm, .pgm, .ppm
Tiff: .tiff, .tif

有损压缩和无损压缩

Python的计算机视觉库

PIL:python 图像处理类库

PIL(Python Image Library)提供了通用的图像处理功能,包括大量基本图像操作,例如缩放、剪裁、旋转、颜色转换等。

载入PIL库

from PIL import Image
  • 图像归档(Image Archives)

    PIL非常适合于图像归档以及图像的批处理任务。你可以使用PIL创建缩略图,转换图像格式,打印图像等等。

  • 图像展示(Image Display)

    PIL较新的版本支持包括Tk PhotoImage,BitmapImage还有Windows DIB等接口。PIL支持众多的GUI框架接口,可以用于图像展示。

  • 图像处理(Image Processing)

    扫描二维码关注公众号,回复: 8712378 查看本文章

    PIL包括了基础的图像处理函数,包括对点的处理,使用众多的卷积核(convolution kernels)做过滤(filter),还有颜色空间的转换。PIL库同样支持图像的大小转换,图像旋转,以及任意的仿射变换。PIL还有一些直方图的方法,允许你展
    示图像的一些统计特性。这个可以用来实现图像的自动对比度增强,还有全局的统计分析等。

PIL库只支持python2.x版本,对于python3.x版本,对应的PIL库更名为pillow。PIL库的帮助文档地址:https://pillow-cn.readthedocs.io/zh_CN/latest/index.html

基本操作命令

基本操作 命令 例子
读取图像 Image.open() im=Image.open(‘test.png’)
保存图像/图像格式转换 Image.save() Image.open(infile).save(outfile)
颜色转换 Image.convert() Image.convert(‘L’) 转换为灰度图像
创建缩略图 Image.thumbmail() im.thumbnail((size))
剪裁 im.crop(box), box是区域四元组=(左,下,右,上) region=im.crop((100,100,400,400))
调整尺寸 im.resize(size) , size是尺寸二元组=(长,宽) im.resize((128,128))
旋转 im.rotate(deg) im.rotate(45)

openCV

openCV是计算机视觉领域最有名的开源项目,源代码是用C++写的,算法执行效率非常高。OpenCV提供了python接口,可以用import cv2方便地调用。

在这里插入图片描述
core =.核心库,基本的数据结构,核心函数
imgproc = 预处理
imgcodecs = 图像输入输出
videoio = 视频输入输出
highgui = UI能力的交互接口
video = 视频分析
calib3d = 摄像头校准和3D重建
features2d : 2D 特征
objdetect : 物体检测
dnn: 深度神经网络
ml: 机器学习 MLL 分类、回归和聚类算法
flann: fast library for approximate nearest neighbors 快速最近邻搜索算法
photo:计算机成像学
stitching: stitching pipeline
shape: 图像距离和匹配
superres: 图像的分辨率增强
videostab: 视频稳定
viz: 3D可视化工具
low-level process: 去噪
iamge sharpening锐化
illumination normalization 模糊的正则化
perspective correction 角度修正
mid-level process: 寻找数据共性特征
high-level process:产品级应用,例如人脸识别,情绪识别,远程人脸图像心率计算

openCV的坐标系统

在openCV中,左上角是原点,但是序号从0开始,也就是说左上角第一个像素点的坐标是(0,0),而不是(1,1)

在这里插入图片描述

读取图像 img = cv2.imread(‘logo.png’)
图像行列: img.shape
图像像素数量 img.size
数据类型:img.dtype
显示图像: cv2.imshow(‘original image’, img)

在这里插入图片描述
例如:
某个像素的BGR数据: (b, g, r) = img[6, 40]
只要蓝色: b=img[6,40]
修改某个像素处的BGR: img[6,40] = (0, 0, 255)
切出图像的某一个部分: top_left = img[0:50, 0:50]

灰度图: 灰度图只有一个channel。

gray_img = cv2.imread('logo.png', cv2.IMREAD_GRAYSCALE)

i = gray_img[6, 40]
gray_img[6, 40] = 0

虽然在openCV中色彩通道的顺序是BGR,但也有不少python图是用了RGB的顺序,例如
matplotlib。

按照色彩通道提取图像数据:

img_cv = cv2.imread(‘logo.png’)
b, g, r = cv2.split(img_cv)

多个色彩通道合成图像:
img_matplotlib = cv2.merge([r,g,b])
用matplotlib绘图,就应该用img_matplotlib,才能得到正确的图像
plt.imshow(img_matplotlib)
用openCV绘图,则应该按照BGR的顺序合成图像:

img_opencv = cv2.merge([b,g,r])
cv2.imshow(img_opencv2)
```. 


## openCV的坐标系统
在openCV中,左上角是原点,但是序号从0开始,也就是说左上角第一个像素点的坐标是(00),而不是(11)
  
读取图像   img = cv2.imread(‘logo.png’)
图像行列: img.shape
图像像素数量 img.size
数据类型:img.dtype
显示图像: cv2.imshow(‘original image’, img)

某个像素的BGR数据: (b, g, r) = img[6, 40]
只要蓝色: b=img[6,40]
修改某个像素处的BGR: img[6,40] = (0, 0, 255)
切出图像的某一个部分: top_left = img[0:50, 0:50]

灰度图: 灰度图只有一个channel。
“gray_img = cv2.imread('logo.png', cv2.IMREAD_GRAYSCALE)
”
i = gray_img[6, 40]
gray_img[6, 40] = 0
>> 虽然在openCV中色彩通道的顺序是BGR,但也有不少python图是用了RGB的顺序,例如matplotlib。
按照色彩通道提取图像数据:
img_cv = cv2.imread(‘logo.png’)
b, g, r = cv2.split(img_cv)

. 
多个色彩通道合成图像:
img_matplotlib = cv2.merge([r,g,b])
用matplotlib绘图,就应该用img_matplotlib,才能得到正确的图像
plt.imshow(img_matplotlib)
用openCV绘图,则应该按照BGR的顺序合成图像: 
```python
img_opencv = cv2.merge([b,g,r])
cv2.imshow(img_opencv2)
```. 

cv2.waitKey(0)
cv2.destroyAllWindows()

### 处理文件和图像
openCV 项目的输入和输出通常是这样的
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911233623640.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhcHB5aG9yaXppb24=,size_16,color_FFFFFF,t_70)


## 其他常用库
Scikit-image (https://scikit-image.org/) 是scikit learn的图像处理工具箱
To work with images: NumPy, OpenCV, scikit-image, PIL Pillow, SimpleCV, Mahotas, ilastik
To work in text: NLTK, spaCy, NumPy, scikit-learn, PyTorch
To work in audio: LibROSA”
“To solve machine learning problem: pandas, scikit-learn, Orange, PyBrain, Milk
To see data clearly: Matplotlib, Seaborn, scikit-learn, Orange
To use deep learning: TensorFlow, Pytorch, Theano, Keras
To do scientific computing: SciPy
To integrate web applications: Django, Flask


发布了111 篇原创文章 · 获赞 118 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/happyhorizion/article/details/100610868