读取图片

1
2
3
4
5
import cv2
import numpy as np

# read the original
img = cv2.imread('test.jpg')

显示图像

1
2
3
4
5
6
7
8
9
10
11
cv2.imshow('original', img)   # 第一个参数是窗口的名字

cv2.waitKey(0)
"""
cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫
秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果
按下任意键,这个函数会返回按键的ASCII 码值,程序将会继续运行。如果没
有键盘输入,返回值为-1,如果我们设置这个函数的参数为0,那它将会无限
期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键a 是否
被按下,这个后面我们会接着讨论。
"""

图像尺寸

1
2
3
print(im.shape)

# (370, 463, 3)

保存图像

1
cv2.imwrite('lena.png',img)

颜色空间转换

1
cv2.cvtColor(input_image ,flag)  # flag是转换类型

BGR和灰度图的转换使用 cv2.COLOR_BGR2GRAY
BGR和HSV的转换使用 cv2.COLOR_BGR2HSV

图像缩放

1
cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)
1
2
3
4
res=cv2.resize(image,(2*width,2*height),interpolation=cv2.INTER_CUBIC) 
# 或者
res=cv2.resize(image,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
# 此处None本应该是输出图像的尺寸,因为后边设置了缩放因子
  • scr:原图
  • dsize:输出图像尺寸
  • fx:沿水平轴的比例因子
  • fy:沿垂直轴的比例因子
  • interpolation:插值方法
interpolation 选项 所用的插值方法
INTER_NEAREST 最近邻插值
INTER_LINEAR 双线性插值(默认设置)
INTER_AREA 使用像素区域关系进行重采样。 它可能是图像抽取的首选方法,因为它会产生无云纹理的结果。 但是当图像缩放时,它类似于INTER_NEAREST方法。
INTER_CUBIC 4x4像素邻域的双三次插值
INTER_LANCZOS4 8x8像素邻域的Lanczos插值

通道的拆分/合并处理

有时需要对BGR三个通道分别进行操作。这时需要将BGR拆分成单个通道。同时有时需要把独立通道的图片合并成一个BGR图像。

使用OpenCV库函数版本

1
2
3
4
5
6
7
8
9
10
11
12
13
import cv2 import numpy as np 
import matplotlib.pyplot as plt
image=cv2.imread('pitt1.jpg')
rows,cols,ch=image.shape
#拆分通道,cv2.split()是一个比较耗时的操作。只有需要时使用,尽量Numpy
b,g,r=cv2.split(image)
print b.shape #(768,1024)
#合并通道
image=cv2.merge(b,g,r)
```


**使用Numpy索引版本**

import cv2 import numpy as np
import matplotlib.pyplot as plt
image=cv2.imread(‘pitt1.jpg’)
rows,cols,ch=image.shape

#直接获取
b=img[:,:,0]
```