python 使用OpenCV库实现图像处理

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库 

image.png

运行下列命令进行安装

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)

输出结果为:

image.png

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的窗口

image.png

(2)创建窗口并显示图片

import cv2
# 载入图像
im = cv2.imread('./1.jpg')
cv2.imshow('win',im)
cv2.waitKey(0)
cv2.destoryAllWindows('win')

这时候会生成一个名为win的窗口并显示图片

image.png

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()

现象如下:

image.png

参考:http://www.lybbn.cn/data/bbsdatas.php?lybbs=39

  • 12
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值