NumPy ROI区域操作的详细教程

 更新时间:2026年05月01日 10:52:18   作者:qq_16313575  
本文介绍了OpenCV中ROI的概念及其在图像处理中的应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

ROI = Region of Interest(感兴趣区域),在 OpenCV/图像处理中就是截取图片的一部分,NumPy 数组的切片语法是核心!

先记住核心规则(最重要)

数组[ 起始行 : 结束行 , 起始列 : 结束列 ]

对应图像:

img[ y1:y2 , x1:x2 ]
  • 行 = 高度 = y 轴
  • 列 = 宽度 = x 轴

一、入门:最简单的 ROI 截取

import numpy as np

# 创建一个 6x6 测试数组(模拟图像)
img = np.arange(36).reshape(6,6)
print("原始数组:")
print(img)

# ====================
# 【入门1】截取固定区域 ROI
# ====================
# 截取 行1~行4,列2~列5
roi = img[1:5, 2:6]
print("\n截取 ROI(行1-4,列2-5):")
print(roi)

二、基础:彩色图像(3通道)ROI

# 创建 400x400 彩色图
img = np.zeros((400,400,3), dtype=np.uint8)

# ====================
# 截取 ROI:y1:y2, x1:x2
# ====================
roi = img[50:200, 100:300]  # 高50→200,宽100→300

print("ROI 形状:", roi.shape)  # (150行, 200列, 3通道)

三、进阶1:修改 ROI

ROI 是原图的视图,不是副本,改 ROI = 改原图!

import numpy as np

img = np.zeros((300,300,3), np.uint8)

# 截取ROI
roi = img[50:150, 50:250]

# 把ROI改成纯红色
roi[:,:] = [0,0,255]  # 全部赋值

# 查看原图 → 已经被修改!
print(img[50,50])  # [0,0,255]

四、进阶2:复制 ROI(独立副本,不影响原图)

# 方法1:.copy()
roi = img[50:150,50:150].copy()

# 方法2:np.copy()
roi = np.copy(img[50:150,50:150])

# 现在修改 roi 不会影响原图!
roi[:,:] = [0,255,0]

五、高阶1:ROI 叠加 / 粘贴

import numpy as np

# 创建大图 + 小图
img = np.zeros((400,400,3), np.uint8)
logo = np.ones((100,100,3), np.uint8) * 255  # 白色小图

# ====================
# 把小图粘贴到大图的 ROI 位置
# ====================
img[50:150, 50:150] = logo

六、高阶2:ROI 按条件提取(掩码提取)

img = np.random.randint(0,255,(200,200,3), np.uint8)

# 提取红色通道 > 100 的区域
mask = img[:,:,2] > 100

# 只保留满足条件的区域
roi = img[mask]

七、高阶3:ROI 边缘扩展(padding)

# 给ROI周围加10像素黑色边框
img = np.zeros((200,200,3), np.uint8)
roi = img[50:100,50:100]

# 上下左右各扩展10像素,填充黑色
roi_pad = np.pad(roi, ((10,10),(10,10),(0,0)), mode='constant')

八、高阶4:ROI 批量裁剪(循环批量截取)

img = np.zeros((500,500,3), np.uint8)
rois = []

# 循环截取多个ROI
for y in range(0,500,100):
    for x in range(0,500,100):
        roi = img[y:y+100, x:x+100]
        rois.append(roi)

九、超实用:OpenCV 图像 ROI 完整示例

import cv2
import numpy as np

# 读取图片
img = cv2.imread("test.jpg")
height, width = img.shape[:2]

# ====================
# 1. 截取人脸区域(模拟)
# ====================
x1, y1 = 100, 80
x2, y2 = 300, 350
face_roi = img[y1:y2, x1:x2]

# ====================
# 2. 把ROI区域调亮
# ====================
face_roi = cv2.add(face_roi, 50)

# ====================
# 3. 粘贴回原图
# ====================
img[y1:y2, x1:x2] = face_roi

# 显示
cv2.imshow("ROI结果", img)
cv2.waitKey(0)

十、ROI 常见错误总结

  1. 越界报错
    img[500:600, 100:200]  # 图片只有400高,会报错
    
  2. 形状不匹配
    img[50:100,50:100] = roi  # roi必须是 50x50
    
  3. 修改ROI同步改原图
    → 必须用 .copy()

最终总结(最核心)

# 截取
roi = img[y1:y2, x1:x2]

# 独立副本
roi = img[...].copy()

# 粘贴
img[y1:y2, x1:x2] = roi

# 通道
roi = img[..., 2]  # 红色通道

到此这篇关于NumPy ROI区域操作的详细教程的文章就介绍到这了,更多相关NumPy ROI区域操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python MNIST手写体识别详解与试练

    Python MNIST手写体识别详解与试练

    MNIST(官方网站)是非常有名的手写体数字识别数据集,在Tensorflow的官方网站里,第一个就拿它来做实战讲解,咱们也以此作为开始的项目
    2021-11-11
  • 深入理解Python闭包与装饰器从入门到进阶

    深入理解Python闭包与装饰器从入门到进阶

    本文详细介绍了Python编程中的闭包和装饰器,详细讲述了装饰器的概念、格式及各种应用场景,强调了闭包和装饰器在Python编程中的重要性和实际应用,感兴趣的朋友跟随小编一起看看吧
    2026-04-04
  • Python批量查找包含多个关键词的PDF文件

    Python批量查找包含多个关键词的PDF文件

    在信息爆炸的时代,数据管理变得愈发重要,本文主要为大家介绍了如何通过Python批量查找包含多个关键词的PDF文件,希望对大家有所帮助
    2024-11-11
  • python manim实现排序算法动画示例

    python manim实现排序算法动画示例

    这篇文章主要为大家介绍了python manim实现排序算法动画示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 一文带你搞懂Python类的访问控制

    一文带你搞懂Python类的访问控制

    这篇文章主要为大家详细介绍了Python中类的访问控制的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解一下
    2025-05-05
  • 利用python画出折线图

    利用python画出折线图

    这篇文章主要为大家详细介绍了利用python画出折线图的相关代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Python实现自动生成高质量文章的示例代码

    Python实现自动生成高质量文章的示例代码

    在当今内容为王的时代,自媒体创作者们面临着巨大的内容生产压力,每天需要产出大量高质量文章来吸引读者,下面我们就来看看如何仅用50行Python代码打造一个自动文章生成器吧
    2025-06-06
  • 基于Python+PyQt5打造一个跨平台Emoji表情管理神器

    基于Python+PyQt5打造一个跨平台Emoji表情管理神器

    在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的Emoji工具箱,需要的可以了解下
    2025-06-06
  • python爬取拉勾网职位数据的方法

    python爬取拉勾网职位数据的方法

    这篇文章主要介绍了python爬取拉勾网职位数据的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python tkinter布局与按钮间距设置方式

    Python tkinter布局与按钮间距设置方式

    这篇文章主要介绍了Python tkinter布局与按钮间距设置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03

最新评论