当前位置:首页 » 《随便一记》 » 正文

图像基本处理(灰度化)

16 人参与  2022年11月29日 09:13  分类 : 《随便一记》  评论

点击全文阅读


项目场景:

今天我们开始最基础的图像处理,将一张图片进行灰度化处理。我们将使用OpenCV来进行图像的处理


基础知识

图片主要包含以下内容:
1.像素,也就是我们通常说的RGB模型,红、绿、蓝组成。
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 npimport matplotlib.pyplot as pltimport cv2# 灰度化img = cv2.imread("lenna.png")h, w = img.shape[:2]  # 获取图片的high和wideimg_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.所以在做二值化的时候无需除以255img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 因为imread读进来的是BGR数据,所以这里做BGR转GRAY# 二值化img_binary = np.where(img_gray/255 >= 0.5, 1, 0) 


点击全文阅读


本文链接:http://zhangshiyu.com/post/49236.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1