OpenCV学习笔记02–图像像素处理–二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数

目录

(一)灰度图像像素处理

(二)彩色图像像素处理

(三)numpy.array库在图像处理中的应用

(四)查看图像的属性信息

接着笔记01继续总结,当我们读取一幅图像的时候,一般为二值图像、灰度图像、彩色图像。二值图像就是组成图像的像素非黑即白,只有两种取值,在double类型中0代表黑,1代表白。uint8的话则是0代表黑,255代表白,如果图像的像素不仅有两种颜色组成,还有白色和黑色的之间的灰色,即把白色和黑色之间分成若干段,每段代表的灰度都不同,这时表现出来的图像就是灰度图像。彩色图像则是色彩上给人的冲击是不一样,比如rgb彩色图像,由三个通道组成,每一个彩色像素值是由三个通道上的各个对应的像素值叠加而成呈现出来的颜色。

(一)、灰度图像像素处理

这里先把用上的lena灰度图像放出来,以便大家进行实践。如下图所示。

OpenCV学习笔记02--图像像素处理--二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数

思路:

第一步:先把读取文件,然后显示其由像素组成数值矩阵,显示原图像。

第二步:访问原图像矩阵中的某个像素值或某些像素值,然后对这些像素值进行修改

第三步:显示修改之后的图像和修改之后的像素值。

代码如下:

import cv2
读取灰度图像,然后对像素值和图像显示,然后修改之后显示修改之后的图像和像素
filename = r'C:\Users\LBS\Desktop\lenagray.png'
读取图像
f = cv2.imread(filename)
显示图像,one是显示图像的窗口的名字
cv2.imshow('one', f)
打印图像对应的像素值的矩阵
print(f)
利用for循环对原图像的第10行到第99行,第80列到第99列的像素值改为255,
for i in range(10,100):
    for j in range(80,100):
        f[i, j] = 255
two代表修改后的图像
cv2.imshow('two', f)
print('f(10:100, 80:100)={0}'.format(f[10:100, 80:100]))
按下任意键关闭图像窗口
cv2.waitKey()
cv2.destroyAllWindows()

结果:

左图是原图像,右图是我们修改之后的,可以看出出现了长方形的白框,这是因为我们赋值了像素值255。

OpenCV学习笔记02--图像像素处理--二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数

输出的像素结果为:

修改之后的那部分都变成了255。

OpenCV学习笔记02--图像像素处理--二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数

(二)、彩色图像像素处理

将rgb彩色图像读入到opencv内进行处理时,第一层第二层第三层分别对应b通道、g通道、r通道,和matlab处理时的通道对应顺序刚好相反。但不影响我们对各个通道进行操作。加入一张图片为f,则f[:,:,0], f[:,:,1],f[:,:,2]就对应了图像的b通道、g通道、r通道的像素值,也可以利用cv2.split(f)[0],cv2.split(f)[1],cv2.split(f)[2],获得三个通道。每一个通道我们又可以看作是灰度图像对应的像素值矩阵。

图像f[x,y,z]中x代表图像的行,y代表图像的列,z代表的某一通道,若为f[x,y],则是对应的三个通道,打印输出的x行y列有三个值

思路:

第一步:先获取彩色图像的三维的数组。如有必要,再获取各个通道的像素值二维数组

第二步:然后通过访问三维数组的像素值对其像素进行修改。

第三步:显示像素值被修改后的图像,以及打印出修改的像素的值信息。

对应代码:

import numpy as np
import cv2
读取彩色图像
filename = r'C:\Users\LBS\Desktop\lena.jpg'
f = cv2.imread(filename)
显示彩色图像
cv2.imshow('01', f)
print("修改像素之前,个别像素对应的像素值\n")
图像f[x,y,z]中x代表图像的行,y代表图像的列,z代表的某一通道,若为f[x,y],则是对应的三个通道,打印输出的x行y列有三个值
print("f[0, 0]=\n", f[0, 0])
print("f[50,0]=\n", f[50, 0])
print("f[100,0]\n", f[100, 0])
对彩色图像的像素进行处理,这里的三重for循环是对三个通道的值都进行修改
for i in range(0, 50):
    for j in range(0, 100):
        for k in range(0, 3):
            f[i, j, k] = 255
for i in range(50, 100):
    for j in range(0, 100):
        for k in range(0, 3):
            f[i, j, k] = 128
如果没有指定对0、1、2、中的哪个通道对应的像素值进行修改时,则同时修改的是三个通道对应的像素值,三个通道都被修改为相同的值。
这里三个通道对应的值都为0,即黑色,可以通过图像进行观察
for i in range(100, 150):
    for j in range(0, 100):
        f[i, j] = 0
显示修改之后的图像
cv2.imshow('02', f)
print("修改像素之后,个别像素对应的像素值\n")
print("f[0, 0]=\n", f[0, 0])
print("f[50,0]=\n", f[50, 0])
print("f[100,0]\n", f[100, 0])
cv2.waitKey()
cv2.destroyAllWindows()

对应结果图像如下图所示:

01是原图像,02是修改之后的图像。

OpenCV学习笔记02--图像像素处理--二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数

OpenCV学习笔记02--图像像素处理--二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数

(三)numpy.array库在图像处理中的应用

这个库中有两个函数,item(), itemset(),可以用来访问像素和修改像素值,如果不用这两个函数的话,我们也能操作,就像前面的(一)、(二)我们都是直接通过图像对象进行操作的。

对于灰度图像:

item(行,列):item是我们的图像对象,像前面的f,由行和列我们就可以确定一个像素的值。

itemset((行,列),要修改的值):这个比我们前面的操作要方便一点,通过这个语句可以直接对像素进行修改。

对于彩色图像:

item(行,列,通道):item是我们的图像对象,像前面的f,由行和列,和通道我们就可以确定某一个通道的一个像素的值。

itemset((行,列,通道),要修改的值):即先通过(行,列,通道)确定一个像素,然后用要修改的值来改变它。如果省去了通道这个值,则是对三个通道的值都进行了相同值的赋值操作。

(四)查看图像的属性信息

假如f代表一幅图像,则可以通过

f.shape:获得图像的行数、列数、通道数(对于彩色图像而言)。

f.size:获得图像的像素数目,即整幅图像有多少个像素。

f.dtype:可以查看图像f的数据类型。

总结:以上就是对像素的基础操作,请大家动手实践哈。

转载请注明出处。编写不易,给个赞吧。

OpenCV学习笔记03–图像运算–图像加法运算、图像位运算、图像掩膜

Original: https://blog.csdn.net/BaoITcore/article/details/123918053
Author: AI学习的我
Title: OpenCV学习笔记02–图像像素处理–二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数

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

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

(0)

大家都在看

  • 获取rdp保存的凭证

    获取用户保存的rdp凭证 当获取到一台windows服务器,可以尝试获取本地远程连接的信息,如果用户在登入rdp时勾选了 允许为我保存凭证的选项,则在该用户本地会生成一个凭证文件,…

    Python 2023年10月8日
    052
  • Python numpy操作

    Python numpy相关操作1.新建一个np数组numpy.empty(shape, dtype = float, order = ‘C’) impor…

    Python 2023年8月25日
    023
  • Python Beautiful Soup安装

    Python Beautiful Soup安装 原创 reg1832022-07-24 00:16:26博主文章分类:后端 ©著作权 文章标签 python 新版本 文章分类 Py…

    Python 2023年5月25日
    070
  • import matplotlib 时报错:ImportError: DLL load failed while importing _path: 找不到指定的模块。

    在网上找了很多种解决方法,都一一试过了,比如卸载numpy和matplotlib再重新安装,或者换成更低的版本,都不管用。最后终于解决了。 先说报错原因,这个问题是由于直接用pip…

    Python 2023年8月30日
    060
  • 【算法分析与设计】【期中(末)复习题】【2022秋】

    文章目录 一. 单选题 二. 填空题 三. 判断题 四. 多选题 一. 单选题 1.按照渐近阶从低到高的顺序排列下列表达式: 30n,2logn,4,n! A. 4 Origina…

    Python 2023年8月9日
    041
  • matplotlib-01

    1.基础线图和X轴的调整 import matplotlib.pyplot as plt import random x = range(0, 120) y = [random.r…

    Python 2023年9月6日
    031
  • 代码深度解析

    文章目录 fetch_data函数 draw_data函数 resample函数解释 源数据: ; fetch_data函数 def fetch_data(file): df=pd…

    Python 2023年8月20日
    047
  • Android 10升级至Android 11后关于startActivity启动应用抛异常处理方法

    最近项目升级到android11后,原先在android10上正常运行的DOU apk在android11上全体趴窝,通过debug定位到在拉起app的地方抛出异常,导致DOU运行…

    Python 2023年6月11日
    087
  • 几个Caller-特性的妙用

    System.Runtime.CompilerServices命名空间下有4个以”Caller”为前缀命名的Attribute,我们可以将它标注到方法参数上…

    Python 2023年10月19日
    024
  • Python中使用Matplotlib库绘制图形

    目录前言一、简单的正弦函数与余弦函数二、进阶版正弦函数与余弦函数1.改变颜色与粗细2.设置图片边界3.设置记号4.设置记号的标签5.设置X,Y轴6.完整代码三、绘制简单的折线图 前…

    Python 2023年8月29日
    063
  • django基础02–一个基于数据库的小项目

    摘要:简单修改、增加部分页面,了解django开发的过程。(Python 3.9.12,django 4.0.4 ) 接前篇,通过命令:django-admin startproj…

    Python 2023年11月2日
    051
  • SpringBoot与Thymeleaf入门级操作

    使用Thymeleaf 三大理由: 简洁漂亮 容易理解 完美支持HTML5 使用浏览器直接打开页面 不新增标签 只需增强属性 学习目标 快速掌握Thymeleaf的基本使用:五大基…

    Python 2023年6月3日
    061
  • python进阶Numpy创建数组

    import numpy as np #创建空数组 e=np.empty([3,4],dtype=float,order=’C’) print(e) #创建0数组 z=np.zer…

    Python 2023年8月25日
    060
  • 10.数据库-Matplotlib

    Matplotlib 文章目录 * – Matplotlib – + 1.基础图象绘制 + * 1.1 完善原始折线图-给图形添加辅助功能 * 1.2中文显…

    Python 2023年9月6日
    077
  • python爬虫-scrapy基本使用

    文章目录 一、介绍 二、基本使用 * 2.1 环境安装 2.2 scrapy使用流程 2.3 文件解析 2.4 settings.py一些常见的设置 三、实例 * 3.1 实例要求…

    Python 2023年10月4日
    043
  • 1. 梯度下降法

    简介 梯度下降法是一种函数极值的优化算法。在机器学习中,主要用于寻找最小化损失函数的的最优解。是算法更新模型参数的常用的方法之一。 相关概念 1. 导数 定义 设一元函数(f(x)…

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