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是矩阵的宽和高。