OpenCV简介

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。

在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。此外,OpenCV还提供了Java、python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。

cv2库的使用方法

安装的时候是 opencv_python,但在导入的时候采用 import cv2

OpenCV常见函数

Img基本属性

  • img.shape:打印图片的高、宽和通道数(当图片为灰度图像时,颜色通道数为1,不显示)
  • img.size:打印图片的像素数目
  • img.dtype:打印图片的格式

基本库函数

cv2.imread(img_path,flags) #读入一张图像

img_path:图片的路径

flags:读入图片的标志(这一部分我暂时不理解)
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
cv2.IMREAD_GRAYSCALE:读入灰度图片
cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道

cv2.imshow(wname,img)     #显示图像

第一个参数是显示图像的窗口的名字

第二个参数是要显示的图像(imread读入的图像),窗口大小自动调整为图片大小

cv2.waitKey(0)
 #等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。
#若没有按下任何键,超时后返回-1。参数为0表示无限等待。不调用waitKey的话,窗口会一闪而逝,看不到显示的图片。

那么为什么cv2.imshow之后要跟cv2.waitkey呢??

imshow的作用是在GUI里显示一幅图像,但是它有个特点是持续时间只有一瞬间,所以使用cv2.waitkey()来控制窗口持续时间。
注意:
cv2.waitkey()中默认参数是0,
即cv2.waitkey()等价于cv2.waitkey(0),窗口会一直存在。

cv2.imwrite(file,img,num)    #保存一张图像

第一个参数file是要保存的文件名

第二个参数是要保存的图像。

第三个参数可以选择,它针对特定的格式:
对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95。
对于png ,表示的是压缩级别,默认为3。

img.copy()    #图像复制
cv2.cvtColor()      #图像颜色空间转换
img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)   #灰度化:彩色图像转为灰度图像
img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)   #彩色化:灰度图像转为彩色图像
# cv2.COLOR_X2Y,其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS
cv2.resize(image, image2,dsize)     #图像缩放:(输入原始图像,输出新图像,图像的大小)

cv2.flip(img,flipcode)              #图像翻转,flipcode控制翻转效果。
flipcode = 0:沿x轴翻转;
flipcode > 0:沿y轴翻转;
flipcode < 0:x,y轴同时翻转

cv2.warpAffine(img, M, (400, 600))  #图像仿射变换 :平移;裁剪、剪切、旋转、仿射变换,
M、M_crop、M_shear、M_rotate

cv2.putText(img,'text',(50,150)   #图像添加文字:(照片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细)

cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)    #画出矩行:img原图、(x,y)是矩阵的左上点坐标、(x+w,y+h)是矩阵的右下点坐标、(0,255,0)是画线对应的rgb颜色、2是所画的线的宽度。

cv2.boundingRect(img)          #返回图像的四值属性:img是一个二值图,即是它的参数; 返回四个值,分别是x,y,w,h; x,y是矩阵左上点的坐标,w,h是矩阵的宽和高。