计算机视觉漫谈5
学号:14020199025
姓名:徐铭晟
【嵌牛导读】:前几次我们都在讨论一些简单的机器学习算法,今天我们回归计算机视觉,讲讲一个比较重要的工具,opencv
【嵌牛鼻子】:opencv
【嵌牛正文】:
在处理图像中,很多相关代码前任已经为我们做了铺垫,不需要我们重复造轮子。特别的,在cv领域,很多代码函数也有前人为我们做了优化,最著名的库应当属于Opencv。
CV即compuer vision,即计算机视觉,open即开放的意思OpenCV是一个开源的计算机视觉库,是英特尔公司资助的两大图像处理利器之一。它为图像处理、模式识别、三维重建、物体跟踪、机器学习和线性代数提供了各种各样的算法。
OpenCV有如下特点:
(1)OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上。
(2)OpenCV提供了Python、Ruby、MATLAB以及其他语言的接口。
(3)它采用优化的C代码编写,能够充分利用多核处理器的优势
(4)具有良好的可移植性
OpenCV的可应用于(1)人机互动 (2)物体识别 (3)图象分割 (4)人脸识别 (5)动作识别 (6)运动跟踪 (7)机器人 (8)运动分析 (9)机器视觉 (10)结构分析
它的组织结构大体如下:
我们来看一个小例子,即可体现出这个工具库的优越性。
opencv做边缘检测
利用canny算子做边缘检测代码如下:
import numpy
import argparse
import cv2
image = cv2.imread('1.jpg')
cv2.imshow("Original", image)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray", gray)
canny = cv2.Canny(gray, 30, 150)
canny = numpy.uint8(numpy.absolute(canny))
cv2.imshow("Edge detection by Canny", numpy.hstack([gray,canny]))
cv2.imwrite("1_edge_by_canny.jpg", numpy.hstack([gray,canny]))
十一行代码,即可完成一个较为复杂的边缘检测模型。我们来看一下完成效果。
由于篇幅有限,本章只略微提下实现,下章具体聊聊图像的边缘提取。