计算机视觉是当前行业中比较热门的领域之一。由于技术和研究的飞速发展,它正在蓬勃发展。但这对于新来者来说仍是个艰巨的任务。XR开发者或数据科学家在过渡到计算机视觉时面临着一些常见的挑战,包括:
1.我们如何清理图像数据集?图像有不同的形状和大小
2.数据获取中一直存在的问题。在建立计算机视觉模型之前,我们应该收集更多图像吗?
3.学习深度学习对建立计算机视觉模型是否必不可少?我们可以不使用机器学习技术吗?
4.我们可以在自己的机器上建立计算机vsiion模型吗?并非每个人都可以使用GPU和TPU!
以下内容由公众号:AIRX社区(国内领先的AI、AR、VR技术学习与交流平台) 整理
目录
-
什么是计算机视觉?
-
为什么要将OpenCV用于计算机视觉任务?
-
读取,写入和显示图像
-
改变色彩空间
-
调整图像大小
-
影像旋转
-
图片翻译
-
简单图像阈值
-
自适应阈值
-
图像分割(分水岭算法)
-
按位运算
-
边缘检测
-
图像过滤
-
影像轮廓
-
尺度不变特征变换(SIFT)
-
加速的强大功能(SURF)
-
特征匹配
-
人脸检测
什么是CV
在进入OpenCV之前,让我快速解释一下什么是计算机视觉。对本文其余部分将要讨论的内容有一个直观的了解。人类能够自然地看到和感知世界。通过视觉和感知的天赋从周围环境收集信息是我们的第二天性。
快速浏览上图。我们花了不到一秒钟的时间发现其中有一只猫,一条狗和一条人的腿。对于机器,这种学习过程变得很复杂。解析图像和检测对象的过程涉及多个复杂步骤,包括特征提取(边缘检测,形状等),特征分类等。
计算机视觉是当前行业中最热门的领域之一。可以预计,未来2-4年将会有大量的职位空缺。那么问题是你准备好利用这些机会了吗?请花点时间考虑一下–当你想到计算机视觉时,会想到哪些应用程序或产品?我们每天都使用其中一些,使用面部识别功能解锁手机,智能手机摄像头,自动驾驶汽车等功能,无处不在。
关于OpenCV
OpenCV库最初是英特尔的一项研究项目。就其拥有的功能而言,它是目前最大的计算机视觉库。OpenCV包含2500多种算法的实现!它可免费用于商业和学术目的。该库具有适用于多种语言的接口,包括Python,Java和C ++。
OpenCV的第一个版本1.0于2006年发布,此后OpenCV社区发展迅猛。
现在,让我们将注意力转移到本文背后的思想上-OpenCV提供的众多功能!我们将从数据科学家的角度研究OpenCV,并了解一些使开发和理解计算机视觉模型的任务变得更加容易的功能。
读取,写入和显示图像
机器使用数字来查看和处理一切,包括图像和文本。你如何把图像转换成数字?没错,像素!
每个数字表示该特定位置的像素强度。在上面的图像中,我展示了灰度图像的像素值,其中每个像素只包含一个值,即该位置的黑色强度。
注意,彩色图像对于单个像素有多个值。这些值表示各自通道的强度——例如,RGB图像的红色、绿色和蓝色通道。
读和写图像是必不可少的任何计算机视觉项目。OpenCV库使这个函数变得非常简单。
#import the libraries
import numpy as np
import matplotlib.pyplot as plt
import cv2
%matplotlib inline
#reading the image
image = cv2.imread('index.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
#plotting the image
plt.imshow(image)
#saving image
cv2.imwrite('test_write.jpg',image)
默认情况下,imread函数以BGR(蓝绿色红色)格式读取图像。我们可以使用imread函数中的额外标志来读取不同格式的图像:
-
cv2.IMREAD_COLOR: 加载彩色图像的默认标志
-
cv2.IMREAD_GRAYSCALE: 以灰度格式加载图像
-
cv2.IMREAD_UNCHANGED: 以给定格式(包括Alpha通道)加载图像。Alpha通道存储透明度信息,Alpha通道的值越高,像素越不透明。
改变色彩空间
颜色空间是一种协议,用于以一种使颜色易于复制的方式表示颜色。我们知道灰度图像有单个像素值,而彩色图像每个像素包含3个值——红、绿、蓝通道的强度。
大多数计算机视觉用例处理RGB格式的图像。然而,像视频压缩和设备独立存储这样的应用程序严重依赖于其他颜色空间,比如颜色-饱和度-值或HSV颜色空间。
正如你所理解的,RGB图像是由不同颜色通道的颜色强度组成的,即强度和颜色信息混合在RGB颜色空间中,而在HSV颜色空间中,颜色和强度信息是相互分离的。这使得HSV颜色空间对光线变化更加健壮。OpenCV默认以BGR格式读取给定的图像。因此,在使用OpenCV读取图像时,需要将图像的颜色空间从BGR更改为RGB。让我们看看怎么做:
#import the required libraries
import numpy as np
import matplotlib.pyplot as plt
import cv2
%matplotlib inline
image = cv2.imread('index.jpg')
#converting image to Gray scale
gray_image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#plotting the grayscale image
plt.imshow(gray_image)
#converting image to HSV format
hsv_image = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
#plotting the HSV image
plt.imshow(hsv_image)