图像基本处理(灰度化)
从0开始的机器学习,图像的基本处理,灰度化以及二值化处理
·
项目场景:
今天我们开始最基础的图像处理,将一张图片进行灰度化处理。我们将使用OpenCV来进行图像的处理
基础知识
图片主要包含以下内容:
1.像素,也就是我们通常说的RGB模型,红、绿、蓝组成。
RGB颜色模型是三维直角坐标系下的一个单位正方体!
也就是说,图片中的某个像素点的取值为(x,y,z)。
2.分辨率,也就是图像的解析度,单位英寸内的像素点数
3.灰度,表示图像像素的明暗程度的数值,也就是黑白图像中点的颜色深度。范围一般为0-255。白色为255,黑色为0.
图片灰度化
我们要做的是将图片灰度化,那么首先就要搞清楚,什么是灰度化?
所谓灰度,就是图像没有色彩。举个例子,原本的彩色图片是有RGB三种颜色组成的(也就是每个像素点由三个值),现在给图像灰度化,每个像素点只有一个值(0-255)表示颜色的深度。
大家也可以这样理解:彩色图片,颜色是在一个三维坐标下(也就是RGB模型)确定的,而灰度图的坐标是在一维坐标下确定的,取值范围为0-255.
图片灰度化的方法(也就是颜色由三维表示转一维表示的方法)
灰度化:
二值化:我们在上诉的灰度化中,颜色以经由三维变成了一维的(取值范围0-255),当这个取值只能为0或者1的时候,便是图像二值化。(当然,这两个值不仅限于0和1,也可以是其他的两个值)
代码展示
import numpy as np
import matplotlib.pyplot as plt
import cv2
# 灰度化
img = cv2.imread("lenna.png")
h, w = img.shape[:2] # 获取图片的high和wide
img_gray = np.zeros([h, w], img.dtype) # 创建一张和当前图片大小一样的单通道图片
for i in range(h):
for j in range(w):
m = img[i, j] # 取出当前high和wide中的BGR坐标
img_gray[i, j] = int(m[0] * 0.11 + m[1] * 0.59 + m[2] * 0.3) # 将BGR坐标转化为gray坐标并赋值给新图像
print(img_gray[2,1])
# 二值化
img_binary = np.where(img_gray/255 >= 0.5, 1, 0)
# 画图
img = plt.imread("lenna.png")
plt.subplot(221)
plt.imshow(img)
plt.title('Color map')
plt.subplot(222)
plt.imshow(img_gray, cmap='gray')
plt.title('gray')
plt.subplot(223)
plt.imshow(img_binary, cmap='gray')
plt.title('img_binary')
plt.savefig('mytestplt.png')
plt.show()
效果展示:
写在最后:
当然,我们在使用第三方库的时候,这种简单的事情根本不需要我们来做,直接调用第三方库的接口即可,哈哈!
# 灰度化
#img_gray = rgb2gray(img) # 此函数做灰度化,返回的数值范围为0-1.所以在做二值化的时候无需除以255
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 因为imread读进来的是BGR数据,所以这里做BGR转GRAY
# 二值化
img_binary = np.where(img_gray/255 >= 0.5, 1, 0)
更多推荐
已为社区贡献1条内容
所有评论(0)