openCV Python 学习笔记(一)图像的基本操作

Python的版本是Python3.6,openCV使用的是cv2

例图


一、图像的读取、显示和保存

读取图像:cv2.imread(filename,flags)

该函数有两个参数,第一个参数是图片的地址,第二个参数是读取图像的方式(默认值为1,以RGB格式读取)


显示图片:cv2.imshow(winname,mat)

以窗口的形式显示图片,两个参数,第一个是窗口上显示的名称,第二个是图像在代码中的表示名称


保存图片:cv2.imwrite(filename,img,params)

N个参数,第一个是要保存的图像的名字,如 'Rachel.jpg' ,第二个是也是图像在代码中的表示名称,此外还有图像的质量等参数,暂且略过


销毁全部窗口:cv2.destroyALLWindows()

销毁特定窗口:cv2.destroyWindow(winname)     括号里填指定窗口名称

绑定按键:cv2.waitKey(delay)


示例代码:

按下 s 键保存图片到 png 格式

import cv2

img = cv2.imread('Rachel.jpg',1) # 若为0则是灰度图
cv2.imshow('Rachel', img)
k = cv2.waitKey(0) # 等待按键,返回按键的ASCII码值
if k == ord('s'): # 若按下 S
    cv2.imwrite('Rachel.png', img)
    cv2.destroyAllWindows() # 删除全部窗口

二、图像的缩放

缩放图片是非常常用的操作,cv2里面的函数是:cv2.resize

函数原型:cv2.resize(src, dst, dsize, fx=0, fy=0, interpolation=INTER_LINEAR )

fx,fy表示缩放比例,interpolation是缩放时填充的类型,有以下几种:

INTER_NEAREST(邻近元素插值法)

INTER_LINEAR(缺省值,双线性插值)

INTER_AREA(使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法)

INTER_CUBIC(立方插值)

示例代码

图片变成原图的0.5倍的灰度图

import cv2

img = cv2.imread('Rachel.jpg', 0) # 注意,第二个参数是0,灰度图
new = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)
cv2.imshow('Rachel', new)
k = cv2.waitKey(0)
if k == ord('s'):
    cv2.imwrite('Rachel1.jpg', new)
    cv2.destroyAllWindows()

结果:



三、图像翻转和旋转

图像翻转用到的函数是cv2.flip

函数原型:cv2.flip(src, dst, flipCode)

flipCode,翻转模式,flipCode==0垂直翻转(沿X轴翻转),flipCode>0水平翻转(沿Y轴翻转),flipCode<0水平垂直翻转(先沿x

轴翻转,再沿Y轴翻转,等价于旋转180°)


示例代码:

import cv2

img = cv2.imread('Rachel.jpg', 0)
new = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)
another_new0 = cv2.flip(new, 0)
another_new1 = cv2.flip(new, 1)
another_new_1 = cv2.flip(new, -1)
cv2.imshow('Rachel', new)
cv2.imshow('Rachel_flip_0', another_new0)
cv2.imshow('Rachel_flip_1', another_new1)
cv2.imshow('Rachel_flip_-1', another_new_1)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:



图像旋转用到的函数是cv2.getRotationMatrix2D

函数原型:getRotationMatrix2D(center,angle,scale)

center一般是中心点的坐标,用元组表示

angle角度是逆时针旋转的角度

scale是比例,有放大或缩小图像的作用


示例代码:

import cv2

img = cv2.imread('Rachel.jpg', 0)
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 90, 1)
dst = cv2.warpAffine(img, M, (cols, rows)) # 仿射变换,以后再说
cv2.imshow('Rachel', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值