当前位置: 首页 > news >正文

图像数字化基础

一、像素
1、获取图像指定位置的像素
import cv2
image = cv2.imread("E:\\images\\2.png")
px = image[291,218]
print("坐标(291,218)上的像素的BGR值是:",px)
(1)RGB色彩空间
  • R通道:红色通道

  • G通道:绿色通道

  • B通道:蓝色通道

(2)RGB的表示

通常使用一个三维数组来表示一幅图像中某一个像素的RGB值

(3)RGB图像

RGB图像时指用RGB色彩空间显示的图像,BGR图像是指使用BGR色彩空间显示的图像;RGB色彩空间和

BGR色彩空间的区别是图像在RGB色彩空间中的通道顺序是R->G->B,在BGR的色彩空间中的通道顺序是

B->G-R

2、修改像素的BGR值

对于RGB/BGR图像,当每个像素的R、G、B这3个值相等时,就可以得到灰度图像。其中。

R=G=B=0(B=G=R=0)为纯黑色;R=G=B=255(B=G=R=255)为纯白色

import cv2image = cv2.imread("E:/images/2.png")
cv2.imshow("2",image)for i in range(241,292):for j in range(168,219):image[i,j] = [255,255,255]cv2.imshow("3",image)
cv2.waitKey()
cv2.destroyWindow()
二、色彩空间
1、GRAY色彩空间
  • GRAY色彩空间通常指的是灰度图像,灰度图像是一种每个像素都是从黑到白,被处理为256个灰度级别的单

色图像。这256个灰度级别分别用区间[0,255]中的数值表示。其中“0”表示纯黑色,“255”表示纯白色,0~255之间

的数值表示不同的亮度(即色彩的深浅程度)的深灰色或浅灰色。因此,一幅灰度图像能够展示丰富的细节信息。

  • 从RGB/BGR色彩空间转换到GRAY色彩空间

dst  =  cv2.cvtColor(src,code)dst:转换后的图像src:转换前的初始图像code:色彩空间转换码
色彩空间转换码含义
cv2.COLOR_BGR2GRAY从BGR色彩空间转换到GRAY色彩空间
cv2.COLOR_RGB2GRAY从RGB色彩空间转换到GRAY色彩空间
import cv2image = cv2.imread("E:/images/2.png")
cv2.imshow("2.1",image)#将图像2.png从BGR色彩空间转换到GRAY色彩空间
gray_image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow("GRAY",gray_image)
cv2.waitKey()
cv2.destroyWindow()
2、HSV色彩空间
  • HSV色彩空间是基于色调、饱和度和亮度而言的。其中,色调(H)是指光的颜色。在OpenCV中,色调在区间【0,180】内取值。例如,代表红色、黄色、绿色和蓝色的色调值分别为0、30、60和120

  • 从RGB/BGR色彩空间转换到HSV色彩空间

色彩空间转换码含义
cv2.COLOR_BGR2HSV从BGR色彩空间转换到HSV色彩空间
cv2.COLOR_RGB2HSV从RGB色彩空间转换到HSV色彩空间
import cv2image = cv2.imread("E:/images/2.png")
cv2.imshow("2.1",image)#将图像2.png从BGR色彩空间转换到GRAY色彩空间
hsv_image = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
cv2.imshow("HSV",hsv_image)
cv2.waitKey()
cv2.destroyWindow()
三、通道
1、拆分通道
  • 拆分一幅BGR图像中的通道
b,g,r = cv2.split(bgr_image)
参数说明:b:B通道图像g:G通道图像r: R通道图像bgr_image:一幅BGR图像 
import cv2bgr_image = cv2.imread("E:/images/2.png")
cv2.imshow("2.1",bgr_image)b,g,r = cv2.split(bgr_image)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)cv2.waitKey()
cv2.destroyWindow()
  • 拆分一幅HSV图像中的通道
h,s,v = cv2.split(hsv_image)
参数说明:h:H通道图像s:S通道图像v:V通道图像hsv_image:一幅HSV图像 
import cv2bgr_image = cv2.imread("E:/images/avatar.png")
cv2.imshow("2.1",bgr_image)#把图2.1从BGR色彩空间转换到HSV色彩空间
hsv_image = cv2.cvtColor(bgr_image,cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv_image)
cv2.imshow("H",h)
cv2.imshow("S",s)
cv2.imshow("V",v)cv2.waitKey()
cv2.destroyWindow()
2、合并通道

合并通道是拆分通道的逆操作

  • 合并B、G、R通道图像

bgr = cv2.merge([b,g,r])
参数说明:bgr:按B->G->R的顺序合并通道后得到的图像r:R通道图像g:G通道图像b:B通道图像注意:合并通道的顺序不同,图像的显示效果也不同
import cv2bgr_image = cv2.imread("E:/images/avatar.png")
cv2.imshow("2.1",bgr_image)b,g,r = cv2.split(bgr_image) #拆分图2.1中的通道bgr = cv2.merge([b,g,r]) #按B->G->R的顺序合并通道
cv2.imshow("BGR",bgr)rgb = cv2.merge([r,g,b]) #按R->G->B的顺序合并通道
cv2.imshow("RGB",rgb)cv2.waitKey()
cv2.destroyWindow()
  • 合并H、S、V通道图像
hsv = cv2.merge([h,s,v])
参数说明:hsv:合并H通道图像、S通道图像和V通道图像后得到的图像h:H通道图像s:S通道图像v:V通道图像 
import cv2bgr_image = cv2.imread("E:/images/avatar.png")
cv2.imshow("avatar.png",bgr_image)
#把图像avatar.png从RGB色彩空间转换到HSV色彩空间
hsv_image = cv2.cvtColor(bgr_image,cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv_image) #拆分HSV图像中的通道
hsv = cv2.merge([h,s,v]) #合并拆分后的通道图像
cv2.imshow("HSV",hsv) #显示合并通道的HSV图像cv2.waitKey()
cv2.destroyWindow()
3、alpha通道

BGR色彩空间包含3个通道,即B通道、G通道、R通道。OpenCV在这3个通道的基础上增加了一个A通道,即alpha通道,用于设置图像的透明度。alpha通道在区间【0,255】内取值;其中,0表示透明,255表示不透明

import cv2bgr_image = cv2.imread("E:/images/avatar.png")
cv2.imshow("2.1",bgr_image)#把图像2.1从BGR色彩空间转换到BGRA色彩空间
bgra_image = cv2.cvtColor(bgr_image,cv2.COLOR_BGR2BGRA)
cv2.imshow("BGRA",bgra_image) #显示BGRA图像
r,g,b,a = cv2.split(bgra_image)
a[:,:] = 172
bgra_172 = cv2.merge([r,g,b,a])
a[:,:] = 0
bgra_0 = cv2.merge([r,g,b,a])cv2.imshow("A = 172",bgra_172)
cv2.imshow("A = 0",bgra_0)cv2.waitKey()
cv2.destroyWindow()
四、使用NumPy模块操作像素
1、NumPy概述

NumPy提供了一个高性能的数组对象,可以轻松创建一维数组、二维数组和多维数组等大量实用方法,帮助开发者轻松地进行数组计算。从而广泛的应用于数据分析、机器学习、图像处理和计算机图形学、数学任务等领域中

2、创建数组
numpy.array(object,dtype,copy,order,subok,ndmin)
参数说明:object:任何具有数组接口方法的对象dtype:数据类型copy:可选参数,布尔型,默认值为True,则object对象被复制order:元素在内存中的出现顺序subok:布尔型。如果值为True,则将传递子类ndmin:指定生成数组的最小维数 
  • 创建一维和二维数组
import numpy as npn1 = np.array([1,2,3]) #创建一个简单的一维数组
n2 = np.array([0.1,0.2,0.3]) #创建一个包含小数的一维数组
n3 = np.array([[1,2],[3,4]]) #创建一个简单的二维数组
  • 创建浮点型数组
import numpy as nplist = [1,2,3]#创建浮点型数组
n1 = np.array(list,dtype=np.float_)
print(n1)
print(n1.dtype)
print(type(n1[0]))
  • 创建三维数组
import numpy as nplist = [1,2,3]
nd1 = np.array(list,ndmin=3)
print(nd1)
3、操作数组
  • 数组加、减、乘、除
import numpy as npn1 = np.array([1,2])
n2 = np.array([3,4])print(n1 + n2)
print(n1 - n2)
print(n1 * n2)
print(n1 / n2)//输出
[4 6]
[-2 -2]
[3 8]
[0.33333333 0.5       ]
  • 幂运算
import numpy as npn1 = np.array([1,2])
n2 = np.array([3,4])print(n1 ** n2)//输出:[ 1 16]
  • 比较运算
import numpy as npn1 = np.array([1,2])
n2 = np.array([3,4])print(n1 >= n2)
print(n1 == n2)
print(n1 <= n2)
print(n1 != n2)//输出
[False False]
[False False]
[ True  True]
[ True  True]
  • 复制数组
import numpy as npn1 = np.array([1,2])
n2 = n1.copy()print(n1 == n2)
n2[0] = 9
print(n1)
print(n2)
print(n1 == n2)//输出
[ True  True]
[1 2]
[9 2]
[False  True]
  • 索引和切片
import numpy as npn1 = np.array([1,2,3])
print(n1[0])
print(n1[1])
print(n1[0:2])
print(n1[1:])
print(n1[:2])//输出
1
2
[1 2]
[2 3]
[1 2]
4、创建图像

在OpenCV中,黑白图像实际是一个二维数组,彩色图像是一个三维数组。数组中每个元素就是图像对应位置的像素值。因此修改图像像素的操作实际就是修改数组的操作

注意:数组索引、像素行列、像素坐标的关系如下数组行索引 = 像素所在行数 - 1 = 像素纵坐标数组列索引 = 像素所在列数 - 1 = 像素横坐标 
  • 创建纯黑色图像
import cv2
import numpy as npwidth = 200
height = 100#创建指定宽度、高度、像素值都为0的图像
img = np.zeros((height,width),np.uint8) #用0填充数组
cv2.imshow("img",img)cv2.waitKey()
cv2.destroyWindow()
  • 创建纯白色图像
import cv2
import numpy as npwidth = 200
height = 100#创建指定宽度、高度、像素值都为1的图像
img = np.ones((height,width),np.uint8)*255 #用1填充数组,然后再乘以255
cv2.imshow("img",img)cv2.waitKey()
cv2.destroyWindow()
  • 在黑色图像内部绘制白色矩形
import cv2
import numpy as npwidth = 200
height = 100#创建指定宽度、高度、像素值都为0的图像
img = np.zeros((height,width),np.uint8) #用0填充数组
# 图像纵坐标为25~75、横坐标为50~100之间的区域变为白色
img[25:75,50:100] = 255
cv2.imshow("img",img)cv2.waitKey()
cv2.destroyWindow()
  • 创建彩色图像
import cv2
import numpy as npwidth = 200
height = 100#创建指定宽度、高度、像素值都为0的图像
img = np.zeros((height,width,3),np.uint8) #用0填充数组
blue = img.copy()
blue[:,:,0] = 255
green = img.copy()
green[:,:,1] = 255
red = img.copy()
red[:,:,2] = 255cv2.imshow("blue",blue)
cv2.imshow("green",green)
cv2.imshow("red",red)cv2.waitKey()
cv2.destroyWindow()
5、图像拼接
  • 水平拼接数组

array  =  numpy.hstack(tup)
参数说明:tup:要拼接的数组元组
返回值说明:array:将参数元组中的数组水平拼接后生成的新数组
  • 垂直拼接数组
array = numpy.vstack(tup)
参数说明:tup:要拼接的数组元组
返回值说明:array:将参数元组中的数组垂直拼接后生成的新数组
  • 拼接图像
import cv2
import numpy as npimg = cv2.imread("E:/images/avatar.png")img_h = np.hstack((img,img))
img_v = np.vstack((img,img))cv2.imshow("img_h",img_h)
cv2.imshow("img_v",img_v)cv2.waitKey()
cv2.destroyWindow()
五、总结

相关文章:

图像数字化基础

一、像素 1、获取图像指定位置的像素 import cv2 image cv2.imread("E:\\images\\2.png") px image[291,218] print("坐标(291,218)上的像素的BGR值是&#xff1a;",px) &#xff08;1&#xff09;RGB色彩空间 R通道&#xff1a;红色通道 G通道&…...

让你的Python代码更简洁:一篇文章带你了解Python列表推导式

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 列表推导式 📒📝 语法📝 条件筛选📝 多重循环📝 列表推导式的优点📝 使用场景📝 示例代码🎯 示例1🎯 示例2⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程中,列表推导式是一种强大且高效的语法,它允许你用…...

基于Matlab的BP神经网络的车牌识别系统(含GUI界面)【W7】

简介&#xff1a; 本系统结合了图像处理技术和机器学习方法&#xff08;BP神经网络&#xff09;&#xff0c;能够有效地实现车牌的自动识别。通过预处理、精确定位、字符分割和神经网络识别&#xff0c;系统能够准确地识别各种车牌图像&#xff0c;并在智能交通管理、安防监控等…...

jetpack compose的@Preview和自定义主题

1.Preview Preview可以在 Android Studio 的预览窗口中实时查看和调试 UI 组件。 基本使用 import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material.MaterialTheme import androidx.compose.material.Surface import androidx.compose.ma…...

Temu(拼多多跨境电商) API接口:获取商品详情

核心功能介绍——获取商品详情 在竞争激烈的电商市场中&#xff0c;快速、准确地获取商品数据详情对于电商业务的成功至关重要。此Temu接口的核心功能在于其能够实时、全面地获取平台上的商品数据详情。商家通过接入Temu接口&#xff0c;可以轻松获取商品的标题、价格、库存、…...

ArcGIS Pro SDK (五)内容 2 工程项

ArcGIS Pro SDK &#xff08;五&#xff09;内容 2 地图工程 目录 ArcGIS Pro SDK &#xff08;五&#xff09;内容 2 地图工程1 将文件夹连接项添加到当前工程2.2 获取所有工程项2.3 获取工程的所有“MapProjectItems”2.4 获取特定的“MapProjectItem”2.5 获取所有“样式工程…...

【ai】初识pytorch

初识PyTorch 大神的例子运行: 【ai】openai-quickstart 配置pycharm工程 简单例子初识一下Pytorch 好像直接点击下载比较慢? 大神的代码 在这个例子中,首先定义一个线性模型,该模型有一个输入特征和一个输出特征。然后定义一个损失函数和一个优化器,接着生成一些简单的线性…...

pcl::PointXYZRGBA造成点云无法显示

如果pcd文件没有rgba信息&#xff0c;使用pcl::PointXYZRGBA类型打开会提示以下信息&#xff1a; Failed to find match for field rgba另外&#xff0c;显示出来的点云是黑色&#xff0c;如果使用默认背景色为黑色&#xff0c;就无法显示点云了。 如果设置其它背景色&#xf…...

【论文精读】分类扩散模型:重振密度比估计(Revitalizing Density Ratio Estimation)

文章目录 一、文章概览&#xff08;一&#xff09;问题的提出&#xff08;二&#xff09;文章工作 二、理论背景&#xff08;一&#xff09;密度比估计DRE&#xff08;二&#xff09;去噪扩散模型 三、方法&#xff08;一&#xff09;推导分类和去噪之间的关系&#xff08;二&a…...

kubesphere踩过的坑,持续更新....

踩过的坑 The connection to the server lb.kubesphere.local:6443 was refused - did you specify the right host… 另一篇文档中 dashboard 安装 需要在浏览器中输入thisisunsafe,即可进入登录页面 ingress 安装的问题 问题描述&#xff1a; 安装后通过命令 kubectl g…...

做Android开发怎么才能不被淘汰?

多学一项技能&#xff0c;可能就会成为你升职加薪的利器。经常混迹于各复杂业务线的人&#xff0c;才能跳出重复工作、不断踩坑的怪圈。而一个成熟的码农在于技术过关后&#xff0c;更突出其他技能对专业技术的附加值。 毋须讳言的是&#xff0c;35岁以后你的一线coding能力一…...

异步爬虫:aiohttp 异步请求库使用:

使用requests 请求库虽然可以完成爬虫业务&#xff0c;但是对于异步任务来说&#xff0c;它是做不到的&#xff0c; 这时候我们需要借助 aiohttp 异步请求库来完成异步爬虫的编写&#xff1a; 话不多说&#xff0c;直接看示例&#xff1a; 注意&#xff1a;楼主使用的python版…...

代码随想录算法训练营第四十七天|LeetCode123 买卖股票的最佳时机Ⅲ

题1&#xff1a; 指路&#xff1a;123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 思路与代码&#xff1a; 买卖股票专题中三者不同的是Ⅰ为只买卖一次&#xff0c;Ⅱ可多次买卖&#xff0c;Ⅲ最多可买卖两次。那么我们将买买卖行为分为五个状态部分(…...

将知乎专栏文章转换为 Markdown 文件保存到本地

一、参考内容 参考知乎文章代码 | 将知乎专栏文章转换为 Markdown 文件保存到本地&#xff0c;利用代码为GitHub&#xff1a;https://github.com/chenluda/zhihu-download。 二、步骤 1.首先安装包flask、flask-cors、markdownify 2. 运行app.py 3.在浏览器中打开链接&…...

【notes2】并发,IO,内存

文章目录 1.线程/协程/异步&#xff1a;并发对应硬件资源是cpu&#xff0c;线程是操作系统如何利用cpu资源的一种抽象2.并发&#xff1a;cpu&#xff0c;线程2.1 可见性&#xff1a;volatile2.2 原子性&#xff08;读写原子&#xff09;&#xff1a;AtomicInteger/synchronized…...

Python题目

实例 3.1 兔子繁殖问题&#xff08;斐波那契数列&#xff09; 兔子从出生后的第三个月开始&#xff0c;每月都会生一对兔子&#xff0c;小兔子成长到第三个月后也会生一对独自。初始有一对兔子&#xff0c;假如兔子都不死&#xff0c;那么计算并输出1-n个月兔子的数量 n int…...

Hive怎么调整优化Tez引擎的查询?在Tez上优化Hive查询的指南

文章目录 在Tez上优化Hive查询的指南调优指南理解Tez中的并行化理解mapper数量理解reducer数量 并发案例1&#xff1a;未指定队列名称案例2&#xff1a;指定队列名称并发的指南/建议 容器复用和预热容器容器复用预热容器 一般Tez调优参数 在Tez上优化Hive查询的指南 在Tez上优…...

关于小程序内嵌H5页面交互的问题?

有木有遇到&#xff1f;有木有遇到。 小程序内嵌了H5&#xff0c;然后H5某个按钮&#xff0c;需要打开小程序某个页面进行信息完善或登记&#xff0c;登记后要返回H5页面&#xff0c;而H5页面要动态显示刚才在小程序页面登记的信息。 操作流程是这样&#xff1a; 方案1&#…...

Linux下手动查杀木马与Rootkit的实战指南

模拟木马程序的自动运行 黑客可以通过多种方式让木马程序自动运行&#xff0c;包括&#xff1a; 计划任务 (crontab)&#xff1a;通过设置定时任务来周期性地执行木马脚本。开机启动&#xff1a;在系统的启动脚本中添加木马程序&#xff0c;确保系统启动时木马也随之运行。替…...

电商爬虫API的定制开发:满足个性化需求的解决方案

一、引言 随着电子商务的蓬勃发展&#xff0c;电商数据成为了企业决策的重要依据。然而&#xff0c;电商数据的获取并非易事&#xff0c;特别是对于拥有个性化需求的企业来说&#xff0c;更是面临诸多挑战。为了满足这些个性化需求&#xff0c;电商爬虫API的定制开发成为了解决…...

nuc马原复习资料

哲学&#xff1a;世界观的理论形态&#xff0c;或者说是系统化、理论化的世界观&#xff1b;世界观和方法论的统一。马克思主义哲学&#xff1a;辩证唯物主义和历史唯物主义&#xff0c;关于自然。社会和思维发展的普遍规律的学说&#xff0c;无产阶级世界观的理论体系。世界观…...

Node.js是什么(基础篇)

前言 Node.js是一个基于Chrome V8 JavaScript引擎的开源、跨平台JavaScript运行时环境&#xff0c;主要用于开发服务器端应用程序。它的特点是非阻塞I/O模型&#xff0c;使其在处理高并发请求时表现出色。 一、Node JS到底是什么 1、Node JS是什么 Node.js不是一种独立的编程…...

淘客返利平台的微服务架构实现

淘客返利平台的微服务架构实现 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨淘客返利平台的微服务架构设计与实现&#xff0c;旨在提高系统的灵…...

【database1】mysql:DDL/DML/DQL,外键约束/多表/子查询,事务/连接池

文章目录 1.mysql安装&#xff1a;存储&#xff1a;集合&#xff08;内存&#xff1a;临时&#xff09;&#xff0c;IO流&#xff08;硬盘&#xff1a;持久化&#xff09;1.1 服务端&#xff1a;双击mysql-installer-community-5.6.22.0.msi1.2 客户端&#xff1a;命令行输入my…...

模拟木马程序自动运行:Linux下的隐蔽攻击技术

模拟木马程序自动运行&#xff1a;Linux下的隐蔽攻击技术 在网络安全领域&#xff0c;木马程序是一种常见的恶意软件&#xff0c;它能够悄无声息地在受害者的系统中建立后门&#xff0c;为攻击者提供远程访问权限。本文将探讨攻击者如何在Linux系统中模拟木马程序的自动运行&a…...

vuex的配置主要内容

1、state 作用&#xff1a;负责存储数据&#xff1b; 2、getters 作用&#xff1a;state计算属性(有缓存)&#xff1b; 3、mutaions 作用&#xff1a;负责同步更新state数据 mutaions是唯一可以修改state数据的方式&#xff1b; 4、actions 作用&#xff1a;负责异步操作&a…...

VBA技术资料MF164:列出文件夹中的所有文件和创建日期

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…...

linux 简单使用 sftp 和 lftp命令

目录 一. 环境准备二. sftp命令连接到SFTP服务器三. lftp命令3.1 连接FTP和SFTP服务器3.2 将文件从sftp服务器下载到本地指定目录 四. 通过WinSCP命令行从SFTP服务器获取文件到Windows 一. 环境准备 ⏹在安卓手机上下载个MiXplorer&#xff0c;用作SFTP和FTP服务器 官网: htt…...

2.超声波测距模块

1.简介 2.超声波的时序图 3.基于51单片机实现的代码 #include "reg52.h" #include "intrins.h" sbit led1P3^7;//小于10&#xff0c;led1亮&#xff0c;led2灭 sbit led2P3^6;//否则&#xff0c;led1灭&#xff0c;led2亮 sbit trigP1^5; sbit echo…...

C语言之常用标准库介绍

文章目录 1 标准库1.1 诊断assert.h1.2 字符类别测试ctype.h1.3 错误处理errno.h1.4 整型常量limits.h1.5 地域环境locale.h1.6 数学函数math.h1.7 非局部跳转setjmp.h1.8 可变参数表stdarg.h1.9 公共定义stddef.h1.10 输入输出stdio.h1.11 实用函数stdlib.h1.12 日期与时间函数…...