总结图像处理读与写的一些函数

总结一下前面所学、所用图像处理的一些函数,以后也会多多总结,因为有些函数常常容易忘记,这里就简单记录一下。

1.读取图像

from PIL import Image
img = Image.open(’img’)
#读取当前目录下的图片’img’
#读取当前目录文件下的图片'./file/img'

import cv2
img = cv2.imread(’img’)

2.显示图像

plt.imshow(img)

cv2.imshow('img',img)
#设置图片展示时间
cv2.waitKey()
#释放内存
cv2.destroyAllWindows()

3.存储图像

#以jpg格式进行存储,名字为img
img.save('img.jpg')

img.save('save.jpg')
#还可以指定图片保存的质量
img.save('new1.jpg',quality=95),默认值为75

cv2.imwrite('im_8.jpg',im8)
#保存图片,命名为im8

5.调整图像大小

# 调整大小为(300,300)
img2 = cv2.resize(img2,(300,300))

4.创造画布

matplotlib.pyplot.figure(num=None, 
figsize=None, 
dpi=None, 
facecolor=None,
edgecolor=None, 
frameon=True, 
FigureClass=<class 'matplotlib.figure.Figure'>, 
clear=False, 
**kwargs)
plt.figure(figsize=(4,4))
  • num:图像编号或名称,数字为编号 ,字符串为名称。不指定调用figure时就会默认从1开始。
  • figsize:指定figure的宽和高,单位为英寸
  • dpi参数指定绘图对象的分辨率,即每英寸多少个像素
  • facecolor:背景颜色
  • edgecolor:边框颜色
  • frameon:是否显示边框
plt.figure(figsize=(x,y))

这个后面的函数一般都用不上主要是figsize=(x,y)设置窗口大小

5.创造单个子图

subplot(nrows,
ncols,
sharex,
sharey,
subplot_kw,
**fig_kw)
  • nrows 表示 subplot 的行数
  • ncols 表示 subplot 的列数
  • sharex 表示 subplot 中 x 轴的刻度,所有的 subplot x 轴应该保持相同的刻度
  • sharey 表示 subplot 中 y 轴的刻度,所有的 subplot y 轴应该保持相同的刻度

6.shape函数的用法

shape函数的功能是读取矩阵或数组的长度

#通常有三种使用方法:shape[0],shape[1],shape
shape[0] #读取行数
shape[1]#读取列数

img.shape#行列数组成元组直接输出

7.np.zeros函数

zeros(shape, dtype=float, order=‘C’)
  • shape:形状
  • dtype:数据类型,可选参数,默认numpy.float64
  • order:可选参数,c代表与c语言类似,行优先;F代表列优先
    np.zeros((h,w),np.uint8)
    #创造h行w列数据类型为np.uint8的全0数组

8.flatten()函数用法

flatten()是对多维数据的降维函数
flatten(),默认缺省参数为0
适用:numpy对象,即数组array或者矩阵MAT,普通的list列表不可以

# flatten可将二维数组转化为一维
image.flatten()

9.hist函数–用于绘制直方图

hist(image.flatten(), 128)
show()#展示
  • hist(data,nbins);
  • data是待统计的向量,nbins是需要划分的条数(默认为10)

10.PIL中convert(‘L‘)函数

img.convert(mode=None, matrix=None, dither=None, palette=0, colors=256)
  • matrix:可选的转换矩阵。如果给定,则应为包含浮点值的4元组或12元组。
  • dither:抖动方法,在从模式“RGB”转换为“ P”或从“ RGB”或“ L”转换为“1”时使用。可用的方法有:data:NONE或:data:FLOYDSTEINBERG(默认)。请注意,在提供``matrix’'时不使用此选项。
  • palette:从模式“ RGB”转换为“ P”时使用的调色板。可用的调色板是WEB或ADAPTIVE。
  • colors:用于“ ADAPTIVE”调色板的颜色数。 默认值为256。
    PIL有九种不同模式: 1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。
 img.convert(1)

为二值图像,非黑即白。每个像素用8个bit表示,0表示黑,255表示白。

img.convert(‘L’)

为灰度图像,每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。

11.图像拼接

# 图片集地址
IMAGES_PATH = 'img/'
# 图片格式
IMAGES_FORMAT = ['.bmp','.jpg']
# 每张小图片的大小为256
IMAGE_SIZE = 256 
# 图片间隔,也就是合并成一张图后,一共有几行
IMAGE_ROW = 2
# 图片间隔,也就是合并成一张图后,一共有几列
IMAGE_COLUMN = 2
# 获取图片集地址下的所有图片名称
image_names = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if
               os.path.splitext(name)[1] == item]
print(image_names)
# 简单的对于参数的设定和实际图片集的大小进行数量判断
l=len(image_names)
if l!=IMAGE_SIZE*IMAGE_COLUMN:
    print('错误')
def image_compose():
  # 创建一个新图
    to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE, IMAGE_ROW * IMAGE_SIZE))
    # 循环遍历,把每张图片按顺序粘贴到对应位置上
    for y in range(1, IMAGE_ROW + 1):
        for x in range(1, IMAGE_COLUMN + 1):
            from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
                (IMAGE_SIZE, IMAGE_SIZE), Image.ANTIALIAS)
            to_image.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE))
    plt.imshow(to_image)
    return to_image.save("拼接结果.jpg")  # 保存拼接之后的结果图

12.灰度图像转换

img1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)

13.复制图像

dst1 = img1.copy()#对原图像复制

14.图像融合(将两张图片放在同一个张上)

import cv2  # 用于图像处理和操作
#采用cv2读取24.bmp图像
img1 = cv2.imread('24.bmp')
img1 = cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
#采用cv2读取1.jpg图像
img2 = cv2.imread('1.jpg')
# 调整大小为(300,300)
img2 = cv2.resize(img2,(300,300))
# 获取矩阵行、列和维度
    #rows = img2.shape[0]
    #cols = img2.shape[1]
    #channels = img2.shape[2]
rows,cols,channels = img2.shape
roi = img1[0:rows,0:cols]
dst = cv2.addWeighted(img2, 0.9, roi, 0.1, 0)#图像融合
dst1 = img1.copy()#对原图像进行拷贝
dst1[0:rows,0:cols] = dst

plt.imshow(dst1)
plt.show()

cv2.imshow('dst',dst)#查看融合结果
cv2.imshow('reusult',dst1)#显示处理后的结果
cv2.imshow('roi',roi)
cv2.imshow('img2',img2)
#保存为reusult.jpg
cv2.imwrite('reusult.jpg',dst1)
# 设置图片展示时间
cv2.waitKey()
# 释放内存
cv2.destroyAllWindows()
"""
cv2.imshow()和plt.imshow()的区别
如果需要展示读入的图像,或者展示对读入图像进行一系列操作后的图像时,使用cv2.imshow()
如果不需要展示原始图像,而是绘制一张新的图像,使用plt.imshow()
注意
opencv是BGR通道,plt默认RGB通道,若使用cv2.imread()读入图像,用plt.imshow()展示原始图像或者展示对读入图像进行一系列操作后的图像时,
需要进行通道转换。
在展示灰度图像时,cv2.imshow(‘gray’, gray)
plt.imshow(gray,cmap=‘gray’), plt.title(‘gray’)
"""

15.对于彩色图像无法转化灰度的问题

cv2.imshow()和plt.imshow()的区别
如果需要展示读入的图像,或者展示对读入图像进行一系列操作后的图像时,使用cv2.imshow()
如果不需要展示原始图像,而是绘制一张新的图像,使用plt.imshow()
注意
opencv是BGR通道,plt默认RGB通道,若使用cv2.imread()读入图像,用plt.imshow()展示原始图像或者展示对读入图像进行一系列操作后的图像时,
需要进行通道转换。
在展示灰度图像时,cv2.imshow(‘gray’, gray)
plt.imshow(gray,cmap=‘gray’), plt.title(‘gray’)

我们首先要知道两者的不同,两者的通道不同,因此在使用plt.show和cv2.imshow后两者图像会出现差异,这个一定要多多注意,我自己本人就常常在这个地方迷糊。


这些是我自己对上一篇图像处理总结的一些函数,以后不会了就回来看看,虽然比较简单,但是好记性不如烂笔头嘛。
我会常常回来看自己写的一些东西,尤其是对函数的总结,有时会存在错误的情况,或者不是很理解的情况,因此我会对自己的文章进行修改

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 要一个识别仪表数的AI组件,需要以下步骤: 1. 收集数据集:首先需要收集大量的仪表数图像,并为其标注数数字。 2. 建立模型:然后可以使用深度学习技术,例如卷积神经网络 (CNN) 或循环神经网络 (RNN),来构建识别仪表数的模型。 3. 训练模型:使用标注数据对模型进行训练,以使其学会识别仪表数。 4. 测试模型:最后,可以使用测试数据集对模型进行评估,以确定其准确性。 在代码实现方面,可以使用Python中的深度学习框架,如TensorFlow、Keras等,来实现这个AI组件。 ### 回答2: 使用Python一个识别仪表数的AI组件可以采用以下步骤: 1. 数据收集:首先,需要收集一批包含各种类型和风格的仪表图片作为训练数据。这些图片可以来自不同角度、距离和照明条件下的仪表。 2. 数据预处理:对于收集到的数据,需要进行预处理,包括图像去噪、裁剪和调整大小等。同时,还需要对图像进行标注,即标记每个图像对应的实际数值。 3. 模型选择和训练:在选择模型时可以考虑使用基于深度学习的卷积神经网络(Convolutional Neural Network, CNN)模型,如LeNet、ResNet等。通过训练数据,使用选定的模型进行训练,目标是使模型能够准确地识别仪表数。 4. 模型评估和优化:使用预留的测试数据对训练后的模型进行评估,计算预测的准确性。根据评估结果进行模型的优化,例如调整模型的结构、训练周期和超参数等。 5. 集成到AI组件:将训练好的模型集成到一个AI组件中,可以使用Python的相关库或框架,如TensorFlow、Keras、PyTorch等。通过调用训练好的模型,实现对仪表图片的数识别。 6. 测试和优化:通过输入一些实际的仪表图片,使用AI组件进行测试,检查其对仪表数的准确性和鲁棒性。根据测试结果进行优化和调整,提高准确性和稳定性。 总之,通过以上步骤,我们可以使用Python一个识别仪表数的AI组件,该组件能够根据输入的仪表图片,准确地识别出对应的数。 ### 回答3: 识别仪表数是一种常见的图像处理问题,可以利用Python和深度学习框架来实现一个AI组件。 首先,需要准备用于训练的数据集。这些数据集应包含仪表的不同数样本,以及相应的标签。可以手动标注这些数据或者使用开源数据集。 然后,使用Python中的深度学习框架(如TensorFlow或PyTorch)来搭建一个卷积神经网络(CNN)模型。CNN是用于图像识别的最常见的模型之一。该模型可以包含若干卷积层、池化层和全连接层。使用框架提供的函数,将数据集输入模型进行训练。 在训练期间,可以使用一些优化技术(如随机梯度下降或Adam优化器)和合适的损失函数(如交叉熵损失)来优化模型。可以通过多次迭代来提高模型的准确性。 训练完成后,可以使用训练好的模型对新的仪表数图像进行预测。首先,将图像输入模型,然后使用模型输出的结果进行后续处理。可以根据需要进行后处理,如数字的精确化或舍入等。 最后,将完成的AI组件集成到需要的应用程序中。可以根据需要使用图形界面或命令行接口提供输入和接收结果。同时,也可以添加日志记录或错误处理等功能来优化组件的性能和可靠性。 总体而言,使用Python一个识别仪表数的AI组件,涉及到数据准备、模型搭建与训练、预测处理、组件集成等多个步骤。通过合适的数据集、深度学习框架和训练技术,可以实现一个准确且高效的仪表数识别组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值