图像基本处理(灰度化)

项目场景:

今天我们开始最基础的图像处理,将一张图片进行灰度化处理。我们将使用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)

Original: https://blog.csdn.net/qq_44169352/article/details/124376724
Author: 别用我ID
Title: 图像基本处理(灰度化)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/728632/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python去掉重复pandas_pandas去除重复列的实现方法

    数据准备 假设我们目前有两个数据表: ① 一个数据表是关于三个人他们的id以及其他的几列属性信息 import pandas as pd import numpy as np da…

    Python 2023年8月8日
    030
  • pytest基本应用(一)

    在Python的编程语言中,单元测试框架主要是pytest,unittest和nose,其中应用最广泛的是unittest和pytest。unittest测试框架是内置的模块,安装…

    Python 2023年9月14日
    057
  • 详解Python-Numpy库的函数diagonal()【并附函数diagonal()与函数diag()的区别】

    函数diagonal()用于返回数组(也可称为矩阵)的对角线元素。 在Numpy库中函数diag()也可用于返回数组的对角线元素,那么二者有什么区别呢? 我们先看二者的原型: 函数…

    Python 2023年8月24日
    061
  • matplotlib绘图库

    matplotlib绘图库 Matplotlib是绘图库,可以绘制函数图、统计图等。专门用于开发2D/3D图表。在数据挖掘中,其可以将难以理解的大量数据进行可视化,使得结果更加直观…

    Python 2023年9月6日
    079
  • Django channels摄像头实时视频传输

    Django channels摄像头实时视频传输(视屏能传别的当然也能传拉) 前言 不想看我瞎扯可以直接跳到这 服务端 * 步骤 解释 发送端 接收端 运行 前言 (网上绝大多数博…

    Python 2023年8月5日
    042
  • os里边的函数用法(持续更新)

    os.environ 对于官方的解释,environ是一个字符串所对应环境的映像对象我们想要用python获得一些有关系统的各种信息的时候就不得不想到os的environ,那这里面…

    Python 2023年6月12日
    095
  • 数据分析(2)Matplotlib绘制2D图表

    文章目录 * – 一. 线型图 – + (一)绘制单条线型图 + (二)绘制多条线型图 + (三)绘制折线图 – 二. 直方图与密度图 &#82…

    Python 2023年9月4日
    064
  • python读取nc文件并转换成csv_在Python3中读取crystal report.rpt文件并将其转换为.csv或.xlsx…

    我手工做了一个版本,因为read_fwf和其他转换方法无法读取我的.rpt文件for file_name in file_names: list_all = [] print(&#…

    Python 2023年8月22日
    053
  • 思维方式之概率思维

    如果现在有两个按钮,按下红色按钮,你可以直接拿走100万美元;按下蓝色按钮,有一半机会,你可以拿到1亿美元,但还有一半机会,你什么都拿不到。你会选哪一个? 你会按红色按钮,直接拿走…

    Python 2023年9月27日
    032
  • python飞机大战教学_python实现飞机大战

    此文实例给亲们分享了python实现飞机大战的具体代码,供大家参考,具体内容如下 实现的效果如下: 主程序代码如下: import pygame from plane_sprite…

    Python 2023年9月23日
    037
  • excel回归分析结果解读

    对于简单数据使用excel进行回归分析,操作简单,方法数据-分析工具-点击回归 (ps.如果你的excel中没有数据分析这一选项,需要设置一下 方法:文件-选项-加载项-勾选数据分…

    Python 2023年9月28日
    025
  • pygame图片精灵

    转向图片精灵 彩色矩形很好 – 它们是一个好的开始,并确保你的游戏基本工作,但迟早你会想要为你的精灵使用一个很酷的宇宙飞船图像或角色。这引出了第一个问题:在哪里获得游戏…

    Python 2023年9月23日
    051
  • MATLAB环境下基于深度学习的语音降噪方法

    之前简单的利用深层自编码器对语音信号进行降噪 基于自编码器的语音信号降噪 – 哥廷根数学学派的文章 – 知乎 基于自编码器的语音信号降噪 – 知…

    Python 2023年9月16日
    053
  • 2021 年年度最佳开源软件

    Svelte https://svelte.dev/ Svelte 是一种全新的构建用户界面的方法。传统框架如 React 和 Vue 在浏览器中需要做大量的工作,而 Svelte…

    Python 2023年9月26日
    065
  • Swin-Transformer(原理 + 代码)详解

    参考博文 图解Swin TransformerSwin-Transformer网络结构详解【机器学习】详解 Swin Transformer (SwinT)论文下载 (二)代码的下…

    Python 2023年8月1日
    064
  • 一些数字分组的计算结果,也许对你的二码运算有用

    把2N个数分成N份,每份2个号码,应该共有combin(2N,N)种,但这有一个问题,生成的二码重复太多,对于观测二码很不方便。能不能让生成的组数中二码只出现一次,也就是最小覆盖?…

    Python 2023年11月8日
    039
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球