前言:为什么开这么一个坑呢?因为我失眠了,又不想辜负这段美妙的午夜时光,那么,就让我们开始美妙的opencv之旅吧
什么是opencv
OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库.
无论你是做科学研究,还是商业应用,opencv都可以作为你理想的工具库,因为,对于这两者,它完全是免费的。
该库采用C及C++语言编写,可以在windows, linux, mac OSX系统上面运行。该库的所有代码都经过优化,计算效率很高,因为,它更专注于设计成为一种用于实时系统的开源库。opencv采用C语言进行优化,而且,在多核机器上面,其运行速度会更快。它的一个目标是提供友好的机器视觉接口函数,从而使得复杂的机器视觉产品可以加速面世。该库包含了横跨工业产品检测、医学图像处理、安防、用户界面、摄像头标定、三维成像、机器视觉等领域的超过500个接口函数。
同时,由于计算机视觉与机器学习密不可分,该库也包含了比较常用的一些机器学习算法。或许,很多人知道,图像识别、机器视觉在安防领域有所应用。但,很少有人知道,在航拍图片、街道图片(例如google street view)中,要严重依赖于机器视觉的摄像头标定、图像融合等技术。
近年来,在入侵检测、特定目标跟踪、目标检测、人脸检测、人脸识别、人脸跟踪等领域,opencv可谓大显身手,而这些,仅仅是其应用的冰山一角。
简而言之,opencv就是英特尔公司最初使用C++开发的一款开源的用于图像处理的开源函数库。
选择语言
我们知道,现在我们使用python 与 C++ 都可以使用opencv,那么问题来了,我们使用那种语言来使用opencv呢?
这里,我认为前期使用python熟悉算法,后期使用C++熟悉底层实现,可能会有人认为Python的速度会很慢,那么你想多了,因为python使用的opencv也是调用的C++的代码,所以不存在速度慢,而且对于python的numpy来说,方便做矩阵运算,更是方便了我们的工作。
安装opencv
pip install cv2
就这么简单
开始学习
基础
大部分人可能都知道电脑上的彩色图是以RGB(红-绿-蓝,Red-Green-Blue)颜色模式显示的,但OpenCV中彩色图是以B-G-R通道顺序存储的,灰度图只有一个通道。
图像坐标的起始点是在左上角,所以行对应的是y,列对应的是x
读取图片,显示图片,保存图片
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2019-02-02 23:09:31
# @Author : Vophan Lee (vophanlee@gmail.com)
# @Link : https://www.jianshu.com/u/3e6114e983ad
import cv2
def read_img(path):
"""
this is a function to read a img and save it
"""
img = cv2.imread(path, 0) # grey
cv2.imshow(path.split(".")[-2], img)
key = cv2.waitKey(0)
if key == ord('S'):
cv2.imwrite(path.split("/")[0] + "/grey.jpg", img)
else:
return 0
if __name__ == "__main__":
read_img("./lena.jpg")
讲解一下上面的几个函数:
imread:读取图片,第二个参数是读取的方式
cv2.IMREAD_COLOR:彩色图,默认值(1)
cv2.IMREAD_GRAYSCALE:灰度图(0)
cv2.IMREAD_UNCHANGED:包含透明通道的彩色图(-1)
注:路径中不能有中文,并且没有加载成功的话是不会报错的,print(img)的结果为None,后面处理才会报错,算是个小坑。imshow:显示图片,第一个参数为我们显示图片窗口的名字,第二个则是我们打开的图片。
waitkey:等待输入,参数为程序等待的时间,返回值为输入的键位。
imwrite:保存图片,参数为路径与图片
下一节,我们将带来matlpotlib的基本用法,如何用opencv录制自己羞羞的视频,如何播放视频,敬请期待