OpenCV是一个C++库,目前流行的计算机视觉编程库,用于实时处理计算机视觉方面的问题,它涵盖了很多计算机视觉领域的模块
一:OpenCV安装
pip install opencv-python
如果安装失败的话,直接下载whl安装包进行安装 https://www.lfd.uci.edu/~gohlke/pythonlibs/
下载下来之后直接执行
pip install 包的位置((如:pip install D:\opencv_python-3.4.1-cp36-cp36m-win_amd64.whl))
如果安装时报以下错误
(1):
Script file ‘D:\Anaconda3\Scripts\pip-script.py’ is not present.
输入下列命令
easy_install pip
(2):缺少ipykernel库
运行下列命令进行安装
pip install ipykernel
二:简单使用
1:读取图片属性 (cv2.imread(图片路径及名称,属性))
CV2的第二个参数说明:
属性:指定图像用哪种方式读取文件
cv2.IMREAD_COLOR:读入彩色图像,默认参数,Opencv 读取彩色图像为BGR模式
cv2.IMREAD_GRAYSCALE:读入灰度图像。
例:
import cv2 #载入OpenCV库 # 载入图像 im = cv2.imread('./1.jpg') # 打印图像尺寸 h, w = im.shape[:2] #hape函数是numpy.core.fromnumeric中的函数,它的功能是查看矩阵或者数组的维数 print(h, w)
输出结果为:
2:保存图片(cv2.imwrite(保存图像名,需保存图像[,第三个可选参数]) )
参数说明:
(1)第一个参数保存图像名就是图像保存的路径及文件名
(2)第二个参数需保存图像就是cv2.imread()方法返回的值
(3)
第三个可选参数:
[1]:cv2.IMWRITE_JPEG_QUALITY指定jpg质量,范围0到100,默认95,越高画质越好,文件越大
cv2.imwrite('lybbn_new.jpg', img, (cv2.IMWRITE_JPEG_QUALITY, 80))
[2]:cv2.IMWRITE_PNG_COMPRESSION指定png质量,范围0到9,默认3,越高文件越小,画质越差
cv2.imwrite('lybbn_new.png', img, (cv2.IMWRITE_PNG_COMPRESSION, 5))
例:
import cv2 # 载入图像 im = cv2.imread('./1.jpg') # 保存jpg格式图像为png格式 cv2.imwrite('./2.png', im)
这时候就会生成一个名为2.png的图片
3:颜色空间转换(cv2.cvtColor(image,method))
参数说明:
(1)image:cv2.imread()方法返回的值
(2)method:转换方式,具体方式如下
[1]cv2.COLOR_BGR2GRAY:转换为灰度图
[2]cv2.COLOR_BGR2HSV:转换为HSV颜色空间。
例:
import cv2 # 载入图像 im = cv2.imread('./1.jpg') #图像灰度转换 gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) cv2.imwrite('./2.png', gray)
这时候会生成一个名为2.phg的灰色图片
4:图片缩放(cv2.resize(img, (width, height),interpolation=cv2.INTER_CUBIC))
参数说明:
(1)img:cv2.imread()方法返回的值
(2) (width, height):缩放图片的宽高
(3)interpolation:
默认值为cv2.INTER_LINEAR
缩小一般使用:cv2.INTER_AREA
放大一般使用:cv2.INTER_CUBIC或cv2.INTER_LINEAR。
例:
import cv2 # 载入图像 im = cv2.imread('./1.jpg') # 缩放 res = cv2.resize(im,(100, 100)) #缩放成100x100的方形图像 #res=cv2.resize(im,None,fx=2,fy=2) 放大为原来的两倍,此处None本应该是输出图像的尺寸,因为后边设置了缩放因子 cv2.imwrite('./2.png', res)
5:创建窗口并显示
cv2.namedWindow(窗口名) #创建一个窗口,并指定窗口名 cv2.imshow(窗口名,图像文件) #在指定窗口中显示图像,第二个参数是cv2.imread()方法返回的值 cv2.waitKey(等待键盘的时间) #等待键盘的时间:单位为毫秒 cv2.destoryAllWindows(窗口名) #删除(释放)建立的窗口
(1)创建一个空窗口并显示
import cv2 cv2.namedWindow('win') cv2.waitKey(0) cv2.destoryAllWindows('win')
这时候会生成一个空的名为win的窗口
(2)创建窗口并显示图片
import cv2 # 载入图像 im = cv2.imread('./1.jpg') cv2.imshow('win',im) cv2.waitKey(0) cv2.destoryAllWindows('win')
这时候会生成一个名为win的窗口并显示图片
6:在图像中绘制矩形(cv2.rectangle(图像,矩形左上角点坐标,矩形右上角点坐标,框的颜色,框的粗细))
参数说明:
图像:经过imread的图像名称
矩形左上角点的坐标:格式为(x,y),x表示左上角点离图像left的距离,y为左上角点离top的距离
矩形右下角点的坐标:格式为(x,y),x表示右下角点离图像left的距离,y为右下角点离top的距离
框的颜色:为rgb颜色,需要传入一个元组,例如(0,0,255)
框的粗细:格式填写数字即可,数字越大线框越粗,框的粗细为-1对封闭图形来说是内部填满,所以画出来的就是红色的圆面而不是圆形
例:
import cv2 # 载入图像 im = cv2.imread('./1.jpg') img=cv2.rectangle(im,(30,20),(40,80),(0,0,255),2) cv2.imwrite('./2.png', img)
7:绘制圆形(cv2.circle(图像,圆心坐标,半径,线的颜色数组,线的粗细))
参数说明:
图像:经过imread的图像名称
圆心的坐标:格式为(x,y),x表示圆心点离图像left的距离,y为圆心点离top的距离
半径:画圆的半径
线的颜色数组:为rgb颜色,需要传入一个元组,例如(0,0,255)
线的粗细:默认为1,格式填写数字即可,数字越大线框越粗,线的粗细为-1对封闭图形来说是内部填满,所以画出来的就是红色的圆面而不是圆形
例:
import cv2 # 载入图像 im = cv2.imread('./1.jpg') img=cv2.circle(im,(80,100),50,(0,0,255),1) cv2.imwrite('./2.png', img)
使用上述方法实现人脸识别,画出人眼以及嘴的位置
在使用pip install opencv-python安装OpenCV库时在Python安装包的Lib/site-packages/cv2/data文件中有许多的xml文件,这是OpenCV提供好的人脸分类模型xml
源码如下
import cv2 # 载入图像 im = cv2.imread('./1.jpg') # OpenCV人脸识别分类器 classifier = cv2.CascadeClassifier( "E:\python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml" ) #人脸分类模型xml地址 color = (0, 255, 0) # 定义绘制颜色 #调用识别人脸 faceRects = classifier.detectMultiScale( im, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32)) print(faceRects) if len(faceRects): # 大于0则检测到人脸 for faceRect in faceRects: # 单独框出每一张人脸 print(1); x, y, w, h = faceRect # 框出人脸 cv2.rectangle(im, (x, y), (x + h, y + w), color, 2) #在图像中绘制矩形 # 左眼 cv2.circle(im, (x + w // 4, y + h // 4 + 30), min(w // 8, h // 8), color) #右眼 cv2.circle(im, (x + 3 * w // 4, y + h // 4 + 30), min(w // 8, h // 8), color) #嘴巴 cv2.rectangle(im, (x + 3 * w // 8, y + 3 * h // 4), (x + 5 * w // 8, y + 7 * h // 8), color) cv2.imshow("image", im) # 显示图像 c = cv2.waitKey(10) cv2.waitKey(0) cv2.destroyAllWindows()
现象如下:
参考:http://www.lybbn.cn/data/bbsdatas.php?lybbs=39