#python --opencv图像处理 --阈值、二值化、翻转、缩放、平移、融合(RGB\Gray)
一、基础知识
1、图像构成:像素块,单个像素块有明确的位置和分配值,形成图像矩阵
主要包括:二值图像、灰度图像、彩色
2、二值图像:二值化
其中像素点分两种0\255,分别代表黑色与白色
3、灰度图像:单通道图像,矩阵.shape(1,256,256)包括黑白和中间的灰色,将亮度划分为256
灰度值:像素值,亮度越高灰度值越大
灰度级:图像中不同灰度的最大数量。灰度级越大,图像的亮度范围越大
4、彩色图像:多通道图像,其中RGB为三通道,shape(3,256,256),代表红绿蓝三色通道
二、图像读取
image = cv.imread(filename[, flags])
函数说明:
--filename:读取图像的文件路径和文件名
--filetype:
--Windows 位图 - * .bmp,* .dib
--JPEG 文件 - * .jpeg,* .jpg,*.jpe
--JPEG 2000文件 - * .jp2
--便携式网络图形 - * .png
--WebP - * .webp
--便携式图像格式 - * .pbm,* .pgm,* .ppm * .pxm,* .pnm
--TIFF 文件 - * .tiff,* .tif
--flags:读取图片的方式,可选项
--cv2.IMREAD_COLOR(1):始终将图像转换为 3 通道BGR彩色图像,默认方式
--cv2.IMREAD_GRAYSCALE(0):始终将图像转换为单通道灰度图像
--cv2.IMREAD_UNCHANGED(-1):按原样返回加载的图像(使用Alpha通道)
--cv2.IMREAD_ANYDEPTH(2):在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位
--cv2.IMREAD_ANYCOLOR(4):以任何可能的颜色格式读取图像
--返回值 image:读取的 OpenCV 图像,nparray 多维数组
示例
import cv2 as cv
# 读取图像
img = cv.imread("maliao.jpg", cv.IMREAD_COLOR)
cv.imshow("read_img", img)
# 灰度图像
img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
cv.imshow("gray_img",img_gray)
# 二值图像
ret, binary = cv.threshold(img_gray, 127, 255, cv.THRESH_BINARY)
cv.imshow("binary_img", binary)
cv.waitKey()
------------------------------
import cv2
import PIL.Image as Im
import numpy as np
im=cv2.imread('./data_dir/image.png')
#转换成rgb
im=cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
#将数据转换成Image对象
im=Im.fromarray(im).convert('RGB')
#Image 直接读取图片
im=Im.open('./data_dir','rgb')
#将Image的对象转换成numpy数组
im=np.asarray(im)
---------------------------------读取文件
import scipy.io as si
import h5py
import numpy as np
#读取npy文件
data=np.load('test.npy')
#保存npy文件
np.save('./test.npy',data)
#读取h5py文件
f=h5py.File('./test.h5','r')#以读的方式打开文件可以根据字典的键值获取数据
data=f['data']
#保存h5文件
f=h5py.File('./test.h5','w')
f['data']=im
f['label']=label
f.cloase()
#读取mat文件mat和h5类似都是字典格式
data=si.loadmat('test.mat')
im=data['x']
label=data['y']
#保存mat文件
si.savemat('test.mat',{'x':im,'y':label})
三、图片读取显示并保存
import cv2 as cv
# 读取图片
img = cv.imread("maliao.jpg", 1)
# 显示图片
cv.imshow("demo", img)
# 等待输入
cv.waitKey(0)
cv.destroyAllWindows()
# 图片写入
cv.imwrite("demo.jpg", img)