机器学习:opencv图像识别--图片专项

目录

前言

一、读取图片

1.安装opencv库

2.读取彩色图片

3.读取灰度图

二、RGB

1.RGB的概念

2.颜色通道:

3.图像表示

4.代码实现单通道图像

三、ROI

1.代码实现

四、图片打码

五、图片组合

六、图片缩放

总结


前言

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,用于图像处理、视频分析、机器学习等任务。它提供了大量的函数和工具,帮助开发者进行图像处理和计算机视觉应用。

一、读取图片

1.安装opencv库

最好安装3.4及之前的版本,新版本可能会有版权问题

2.读取彩色图片

代码:

python 复制代码
import cv2

"--------------------读取图片-------------------"
a = cv2.imread('suda.jpg')
cv2.imshow('suda', a)  # 显示图片 第一个参数,给显示框命名
b = cv2.waitKey(0)    # 显示时间 单位毫秒  0一直显示 键盘任意按键结束 返回按键的ascll码值
print(b)
cv2.destroyAllWindows()   # 关闭所有窗口

print("图片的形状", a.shape)
print("图像数据类型", a.dtype)
print("图像大小", a.size)

输出:

python 复制代码
图片的形状 (940, 940, 3)
图像数据类型 uint8
图像大小 2650800

3.读取灰度图

代码:

python 复制代码
import cv2

"--------------------读取灰度图------------------"
a = cv2.imread('suda.jpg', cv2.IMREAD_GRAYSCALE)  # 读取的时候转换成灰度图进行读取 IMREAD可以用0替换
# img = cv2.imread('suda.jpg')
# a = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('suda', a)  # 显示图片 第一个参数,给显示框命名
b = cv2.waitKey(0)  # 显示时间 单位毫秒  0一直显示 键盘任意按键结束 返回按键的ascll码值
print(b)
cv2.destroyAllWindows()  # 关闭所有窗口

print("图片的形状", a.shape)
print("图像数据类型", a.dtype)
print("图像大小", a.size)

'''保存图片'''
cv2.imwrite('suda_GRAY.jpg', a)

输出:

  • 可以看到图片的形状变成了一维
  • 图像大小变成了彩色图片的三分之一
python 复制代码
图片的形状 (940, 940)
图像数据类型 uint8
图像大小 883600

二、RGB

1.RGB的概念

RGB 是一种颜色表示模型,用于图像和视频处理中。RGB 代表红色(Red)、绿色(Green)和蓝色(Blue)三个颜色通道,通过调整这三种颜色的强度来生成其他颜色。每种颜色通道的强度通常用一个整数值表示,范围从0到255。

2.颜色通道

  • 红色通道(R):控制红色的强度。
  • 绿色通道(G):控制绿色的强度。
  • 蓝色通道(B):控制蓝色的强度。

3.图像表示

  • 在数字图像处理中,每个像素的颜色通常由三个数值表示,这三个数值分别对应于红色、绿色和蓝色通道的强度。
  • 例如,一个像素的颜色为(128,64,32)表示红色强度为128,绿色强度为64,蓝色强度为32。

4.代码实现单通道图像

  • 为什么这样读取单色通道,因为每个图像是由三张不同的单色通道的图叠加而成的
  • 直接显示单色通道图会呈现类似灰度图的样子,因为此时默认另外两个通道的值为255,会有很大影响
  • 当把另外两个通道的值变成0时,即可输出正常的单色图像
  • 最后还有使用cv2.merge()函数实现多通道合并
python 复制代码
import cv2

# 读取图像
a = cv2.imread('suda.jpg')

# 提取颜色通道
# b = a[:, :, 0]  # 蓝色通道
# g = a[:, :, 1]  # 绿色
# r = a[:, :,2]  # 红色
# 分离通道
b, g, r = cv2.split(a)

# 显示单通道的图像  灰度
cv2.imshow('result', b)  # 显示为灰度图的样子 因为取单通道时其他通道默认值为255 调成0才显示单颜色
cv2.waitKey(10000)
cv2.destroyAllWindows()

# 显示单通道图像  单色
a_new = a.copy()
a_new[:, :, 1] = 0  # 将绿色通道设置为0
a_new[:, :, 2] = 0  # 将红色通道设置为0
cv2.imshow('result', a_new)  # 显示为单色
cv2.waitKey(10000)
cv2.destroyAllWindows()

'''合并颜色通道'''
img = cv2.merge((b, g, r))  # 图片通道数只能是1,3,4
cv2.imshow('result', img)  # 显示为单色
cv2.waitKey(10000)
cv2.destroyAllWindows()
  • 未将另外两个通道的值设置为0时,默认255的效果:
  • 将另外两个通道的值设置为0时的效果:
  • 合并颜色通道的效果:

三、ROI

"ROI" 在图像处理中代表"感兴趣区域"(Region of Interest)。它是图像中的一个特定区域,人为取出图像中的某个区域。

1.代码实现

  • 代码很简单
  • 实质是取图片数组中的某个部分,形成新的显示
python 复制代码
import cv2

a = cv2.imread("suda.jpg")
b = a[100:600, 100:600]
cv2.imshow('pic', a)
cv2.imshow('sec', b)
cv2.waitKey(10000)
cv2.destroyAllWindows()

四、图片打码

  • 实质是用随机像素组成的矩阵替换图片中某一块矩阵的像素
python 复制代码
import cv2
import numpy as np

# 图片打码
a = cv2.imread('suda.jpg')
a[100:200, 200:300] = np.random.randint(0, 256, (100, 100, 3))
"""
两边矩阵大小须一致
np.random.randint(0, 256, (100, 100, 3)) 生成一个形状为 (100, 100, 3) 的随机整数数组
这些随机整数在 [0, 256) 范围内(即从0到255),通常用于表示RGB图像的像素值
(100, 100, 3) 表示生成一个100行100列的像素区域,每个像素有三个通道(R、G、B)
"""
cv2.imshow('pic', a)
cv2.waitKey(10000)
cv2.destroyAllWindows()

输出:

五、图片组合

  • 本质是用一张图片的某一部分取替换另一张图片的某一部分
python 复制代码
# 图片组合
a = cv2.imread('suda.jpg')
b = cv2.imread('figure_0_9.png')
a[200:300, 300:500] = b[300:400, 500:700]  # 将a的一部分替换为b的一部分 两边矩阵大小须一致
cv2.imshow('pic', a)
cv2.imshow('sec', b)
cv2.waitKey(10000)
cv2.destroyAllWindows()

输出:

六、图片缩放

  • 有两种方法:
    • 一种是直接设定新图片的宽高
    • 另一种是使用resize设定新图片与原图片的比例
python 复制代码
# 图片缩放
""" 
cv2.resize
src:要调整大小的输入图像,可以是numpy数组、PIL图像或其他类型
dsize:输出图像的大小,可以是一个元组,例如(宽,高),或者使用整数标量来缩放原始图像。如果dsize为None,则根据scalefx和scalefy缩放原始图像
fx:沿x轴的缩放倍数
fy:沿y轴的缩放倍数
"""
a = cv2.imread('suda.jpg')
a_new = cv2.resize(a, (200, 600))  # 设置宽、高
# a_new = cv2.resize(a, dsize=None, fx=0.5, fy=0.5)
print(a.shape)  # 高、宽、通道数
cv2.imshow('pic', a)
cv2.imshow('sec', a_new)
cv2.waitKey(10000)
cv2.destroyAllWindows()

输出:

  • 这是设置宽高
  • 这是设置比例

总结

opencv库的功能十分强大,这只是其中一部分,后续还会介绍其他的功能

相关推荐
果冻人工智能8 分钟前
2025 年将颠覆商业的 8 大 AI 应用场景
人工智能·ai员工
代码不行的搬运工9 分钟前
神经网络12-Time-Series Transformer (TST)模型
人工智能·神经网络·transformer
石小石Orz11 分钟前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
罗小罗同学17 分钟前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer
孤独且没人爱的纸鹤20 分钟前
【深度学习】:从人工神经网络的基础原理到循环神经网络的先进技术,跨越智能算法的关键发展阶段及其未来趋势,探索技术进步与应用挑战
人工智能·python·深度学习·机器学习·ai
阿_旭23 分钟前
TensorFlow构建CNN卷积神经网络模型的基本步骤:数据处理、模型构建、模型训练
人工智能·深度学习·cnn·tensorflow
羊小猪~~24 分钟前
tensorflow案例7--数据增强与测试集, 训练集, 验证集的构建
人工智能·python·深度学习·机器学习·cnn·tensorflow·neo4j
极客代码30 分钟前
【Python TensorFlow】进阶指南(续篇三)
开发语言·人工智能·python·深度学习·tensorflow
zhangfeng113330 分钟前
pytorch 的交叉熵函数,多分类,二分类
人工智能·pytorch·分类
Seeklike32 分钟前
11.22 深度学习-pytorch自动微分
人工智能·pytorch·深度学习