机器学习: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库的功能十分强大,这只是其中一部分,后续还会介绍其他的功能

相关推荐
糖果店的幽灵几秒前
大模型测评DeepEval快速入门-安全与通用指标详解
人工智能·安全·langgraph·大模型测评·deepeval
YFJ_mily1 小时前
【会议征稿】第八届人本计算与数据智能国际会议(HCC 2026)| 广州12月召开,EI/Scopus稳定检索,多届收录无忧
机器学习·人机交互·ei会议·数据智能·rdlink研发家·人本计算·广州会议
江畔柳前堤6 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
晓梦林6 小时前
BUUCTF findKey-学习笔记
笔记·学习
阿里云大数据AI技术6 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客6 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术7 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO7 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术8 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架8 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github