python使用opencv对图像的基本操作(2)

13.对多个像素点进行操作,使用数组切片方式访问

javascript 复制代码
img[i,:] = img[j,:]
#将第j行的数值赋值给第i行
img[-2,:]或img[-2]
#倒数第二行
img[:,-1]
#最后一列
img[50:100,50:100]
#50-100行,50-100列(不包括第100行和第100列)
img[:100,:50].sum()
#计算前100行、前50列所有的数值的和
img[i].mean()
#第i行所有数值的平均值

对多个像素点进行操作,特别是图像处理领域,使用数组切片方式访问是一种非常高效的方法。数组切片允许开发者通过简单的语法获取数组中的一段连续元素,这些元素可以是一个像素点的颜色信息,例如在RGB图像中,一个像素点由红、绿、蓝三个颜色通道的值组成。
运行结果:

14.将图片进行二值化

二值化:是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值,从而实现二值化。

javascript 复制代码
from skimage import io,data,color
img = io.imread('lbxx.jpg')
img_gray=color.rgb2gray(img)    #将RGB图像转换为灰度图像
rows,cols=img_gray.shape
for i in range(rows):
    for j in range(cols):
        if (img_gray[i,j]<=0.5):  #128/255
            img_gray[i,j]=0
        else:
            img_gray[i,j]=1
io.imshow(img_gray)

运行结果:

注:color.rgb2gray: 这是 Scikit-image 库中 color 模块的一个函数,用于将RGB彩色图像转换为灰度图像。灰度图像是单通道的,每个像素的值代表该点的亮度,范围通常是0到1,其中0表示黑色,1表示白色,0.5表示灰色。

15.将图片进行归一化

归一化:图像归一化是指对图像进行了一系列标准的处理变换,使图像变换为一个固定标准形式的过程。

javascript 复制代码
from skimage import exposure, io
# 读取图像
image = io.imread('lbxx.jpg')
# 归一化处理
normalized_image = exposure.rescale_intensity(image, in_range='image', out_range=(0, 0.4))
io.imshow(normalized_image)
io.show()

运行结果:

注:图片归一化是图像处理中的一种常见技术,它将图像的像素值映射到一个特定的范围,通常是[0, 1]或[-1, 1]。

15.1线性归一化

定义:是一种常见的数据预处理方法,也被称为 Min-Max 归一化。 它通过对原始数据进行线性变换,将其缩放到特定的范围内,常用的是将数据缩放到 [0, 1] 或 [-1, 1] 范围内。

javascript 复制代码
image = io.imread('1.jpg')
normalized_image = (image - np.min(image)) / (np.max(image) - np.min(image))
io.imshow(normalized_image)

运行结果:

注:

线性归一化到[0, 1]区间:

normalized_image = (image - min_val) / (max_val - min_val)

线性归一化到[-1, 1]区间:

normalized_image = 2 * (image - min_val) / (max_val - min_val) - 1

15.2均值方差归一化:

将图像的像素值减去均值后,除以标准差,使得图像的均值为0,标准差为1。这样可以降低图像数据的偏差和差异性。

javascript 复制代码
import numpy as np
# image为array类型,多少维度都无所谓,直接操作全部元素
image2 = (image - np.min(image)) / (np.max(image) - np.min(image))
io.imshow(image2)

运行结果:

15.3直方图均值化

通过重新分布图像像素的直方图,增强图像的对比度和细节。这在图像增强和图像识别等领域非常有用。

javascript 复制代码
from skimage import exposure
equalized_image = exposure.equalize_hist(image)
io.imshow(equalized_image)

运行结果:

15.4.改变通道颜色

javascript 复制代码
from skimage import io,data
img=io.imread('lbxx.jpg')
a = img[:,:,0] >170
img[a] = [0, 255, 0] #红色
io.imshow(img)

注:这段代码的作用是将图像中红色通道值大于170的像素染成绿色,并显示结果。
运行结果:

javascript 复制代码
from skimage import io,data
img=io.imread('lbxx.jpg')
a = img[:,:,1] >170
img[a] = [0, 255, 0] #绿色
io.imshow(img)

运行结果:

javascript 复制代码
from skimage import io,data
img=io.imread('lbxx.jpg')
a = img[:,:,2] >170
img[a] = [0, 0, 255] #蓝色
io.imshow(img)

运行结果:

16.图像数据类型及转换

16.1.查看数据类型

javascript 复制代码
from skimage import io,data
img=io.imread('lbxx.jpg')
print(img.dtype.name)

注:print(img.dtype.name)这行代码打印出图像数组的数据类型,type.name则给出了这个数据类型的字符串表示;uint8,表示数组中的每个元素都是一个8位的无符号整数,取值范围从0到255。
运行结果:

16.2unit8转float

javascript 复制代码
from skimage import io,data,img_as_float
import numpy as np
img=io.imread('lbxx.jpg')
print(img)
print(img.dtype.name)
dst=img_as_float(img)
print(dst.dtype.name)
print(dst)

注:dst=img_as_float(img)这行代码将图像转换为浮点数表示。这意味着图像中的每个像素值将被转换为0.0到1.0之间的浮点数。

运行结果:

16.3.float转uint8

javascript 复制代码
from skimage import img_as_ubyte
import numpy as np
img = np.array([0, 0.5, 1], dtype=float)
print(img.dtype.name)
dst=img_as_ubyte(img)
print(dst.dtype.name)
print(dst)

注:img = np.array([0, 0.5, 1], dtype=float)这行代码创建一个包含三个浮点数的一维数组,这三个数分别是0, 0.5, 和1。数组的类型被指定为float。
运行结果:

相关推荐
池央42 分钟前
AI性能极致体验:通过阿里云平台高效调用满血版DeepSeek-R1模型
人工智能·阿里云·云计算
我们的五年43 分钟前
DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成
人工智能·chatgpt·ai作画·deepseek
Yan-英杰44 分钟前
百度搜索和文心智能体接入DeepSeek满血版——AI搜索的新纪元
图像处理·人工智能·python·深度学习·deepseek
Fuweizn1 小时前
富唯智能可重构柔性装配产线:以智能协同赋能制造业升级
人工智能·智能机器人·复合机器人
weixin_307779132 小时前
Azure上基于OpenAI GPT-4模型验证行政区域数据的设计方案
数据仓库·python·云计算·aws
玩电脑的辣条哥3 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
taoqick3 小时前
对PosWiseFFN的改进: MoE、PKM、UltraMem
人工智能·pytorch·深度学习
suibian52353 小时前
AI时代:前端开发的职业发展路径拓宽
前端·人工智能
预测模型的开发与应用研究4 小时前
数据分析的AI+流程(个人经验)
人工智能·数据挖掘·数据分析
源大模型4 小时前
OS-Genesis:基于逆向任务合成的 GUI 代理轨迹自动化生成
人工智能·gpt·智能体