图像类型可以分为三种,分别为二值图,灰度图,彩色图。
图像以矩阵表示。灰度图为二维矩阵表示,彩色图为三位矩阵表示。
分辨率的概念就是水平和竖直方向单位像素的个数。
img.ndim==3
img_gray.ndim==2
可以进行矩阵到图像的模拟,用上期的show()
函数显示图像:
#再次给出show()函数的封装以便巩固学习
def show(img):
if img.ndim==2:
plt.imshow(img,cmap='gray')#可调整参数vmin=0,vmax=255来调整放缩,细分灰度
else:
img=cv.cvtColor(img,cv.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()
矩阵模拟灰度图:
A=np.random.randint(0,256,(4,4),dtype=np.uint8)#4*4分辨率
show(A)
array([[114, 66, 153, 60],
[ 45, 149, 118, 167],
[248, 72, 163, 245],
[128, 15, 31, 154]], dtype=uint8)
矩阵来模拟彩色图:
B=np.random.randint(0,256,(4,4,3),dtype=np.uint8)#()内的参数为4*4的分辨率,3指的是通道数,而非维数
show(B)
array([[[147, 122, 138],
[151, 50, 253],
[228, 196, 165],
[113, 15, 224]],
[[ 7, 157, 8],
[214, 59, 101],
[ 49, 121, 35],
[ 8, 70, 96]],
[[ 58, 184, 46],
[131, 140, 238],
[ 97, 244, 243],
[245, 157, 118]],
[[ 29, 62, 238],
[143, 132, 13],
[181, 7, 157],
[130, 139, 136]]], dtype=uint8)
RGB红绿蓝三色通道,OpenCV中读取图像为BGR三色通道,只是颜色顺序不同,本质都是矩阵数据。
彩色图为三色通道叠加而成。
img_gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
show(img_gray)
x,img_bin=cv.threshold(img_gray,125,255,cv.THRESH_BINARY)
#其中第一个参数为灰度图像,第二个参数为分界值125,即为当thresh>125置为255,否则置为0,
show(img_bin)
当然,这里有其他可以设置二值图的方案可以自行选择
threshold=125
img_gray[img_gray>threshold]=255
img_gray[img_gray<=threshold]=0
show(img_gray)
#分离
b,g,r=cv.split(img)
#合成
img2=cv.merge([b,g,r])