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。
运行结果:

相关推荐
一 铭27 分钟前
AI领域新趋势:从提示(Prompt)工程到上下文(Context)工程
人工智能·语言模型·大模型·llm·prompt
顾道长生'2 小时前
(Arxiv-2025)通过动态 token 剔除实现无需训练的高效视频生成
计算机视觉·音视频·视频生成
云泽野3 小时前
【Java|集合类】list遍历的6种方式
java·python·list
麻雀无能为力4 小时前
CAU数据挖掘实验 表分析数据插件
人工智能·数据挖掘·中国农业大学
时序之心4 小时前
时空数据挖掘五大革新方向详解篇!
人工智能·数据挖掘·论文·时间序列
IMPYLH4 小时前
Python 的内置函数 reversed
笔记·python
.30-06Springfield5 小时前
人工智能概念之七:集成学习思想(Bagging、Boosting、Stacking)
人工智能·算法·机器学习·集成学习
说私域6 小时前
基于开源AI智能名片链动2+1模式S2B2C商城小程序的超级文化符号构建路径研究
人工智能·小程序·开源
永洪科技6 小时前
永洪科技荣获商业智能品牌影响力奖,全力打造”AI+决策”引擎
大数据·人工智能·科技·数据分析·数据可视化·bi
shangyingying_16 小时前
关于小波降噪、小波增强、小波去雾的原理区分
人工智能·深度学习·计算机视觉