数字图像处理(一)
平台:opencv-python
读入图片:cv2.imread(path, flags)
flag=-1时,8位深度,原通道
flag=0,8位深度,1通道
flag=1, 8位深度 ,3通道
flag=2,原深度,1通道
flag=3, 原深度,3通道
flag=4,8位深度 ,3通道
保存图片:cv2.imwrite(path, data)
显示图片:cv2.imshow(window_name, data)
等待输入:cv2.waitkey(wait_time)
wait_time>=0,按任意键继续
销毁窗口:cv3.destoryAllWindows()
颜色空间转换:cv2.cvtColor(data, convert_type)
convert_type----cv2.COLOR_BGR2BGRA等各种颜色空间转换
基础概念
图像的形成
一般图像灰度值f(x,y)由照射分量i(x,y)和反射分量r(x,y)形成。
f(x,y) = i(x,y)*r(x,y),其中,0 < i(x,y) < +inf, 0 < r(x,y) < 1
灰度级
灰度级:由照射分量和反射分量可以知道,一般灰度级在 Lmin - Lmax 之间。
通常,灰度级取0-( Lmax - Lmin - 1),即[0, L-1],其中L就是对比度。
亮度、对比度、饱和度、色调(色相)
亮度:一般是指灰度值f(x,y),灰度值整体越大,图像越亮,反之,图像越暗
对比度:一般是指最大最小的灰度之差,最大最小的灰度级之差。
饱和度:基色的灰度值之间的变化。越接近0,图像就越失去色彩。取值在[0-1]之间。
色调(色相):指纯颜色,如红色,蓝色,绿色。
>>空间坐标变换<<
cv2.warpAffine(src, M, dsize, flags)
M:仿射矩阵(shape:(2, 3))
dsize:处理后图像的大小:(rows, cols)
flags:
INTER_NEAREST - 最近邻插值(一般不推荐)
INTER_LINEAR - 线性插值(默认, 推荐放大时使用)
INTER_AREA - 区域插值(推荐缩小时使用)
INTER_CUBIC - 三次样条插值(推荐放大时使用)
INTER_LANCZOS4 - Lanczos 插值
1. 尺度变换(放大或者缩小)
注意:在尺度变换的过程中,伴随着插值运算(新坐标的像素值,无法对齐到原坐标上)
# 方法1:cv.warpAffine(src, M, dsize, flags)
t = 1.8
kernel = np.array([[t, 0, 0], [0, t, 0]], dtype=np.float32)
img_interpolation = cv.warpAffine(img_org, kernel, dsize=(int(t * w), int(t * h)), flags=cv.INTER_LINEAR)
# 方法2:cv.resize(src, dzise, interpolation)
img_interpolation = cv.resize(img_org, dsize=(int(t * w), int(t * h)), interpolation=cv.INTER_LINEAR)
2. 旋转变换
注意:旋转后,在没有缩放的情况下,新旧坐标的像素值对应相等
# 方法1:cv.rotate()
img_rotation = cv.rotate(img_org