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图像运算之图像阈值化处理详解

    Python图像运算之图像阈值化处理详解

    这篇文章将详细讲解图像阈值化处理,涉及阈值化处理、固定阈值化处理和自适应阈值化处理,这是图像边缘检测或图像增强等处理的基础,感兴趣的可以了解一下
    2022-04-04
  • Python将Word文档转换为Markdown格式

    Python将Word文档转换为Markdown格式

    Markdown作为一种轻量级标记语言,以其简洁的语法和广泛的兼容性,本文将介绍如何使用Python将Word文档转换为Markdown文件,需要的可以了解下
    2024-11-11
  • 编写Python脚本抓取网络小说来制作自己的阅读器

    编写Python脚本抓取网络小说来制作自己的阅读器

    这篇文章主要介绍了编写Python脚本抓取网络小说来制作自己的阅读器的方法,包括对小说的章节排列等方面的优化,对于Python学习者来说非常具有实践意义!需要的朋友可以参考下
    2015-08-08
  • Python socket连接中的粘包、精确传输问题实例分析

    Python socket连接中的粘包、精确传输问题实例分析

    这篇文章主要介绍了Python socket连接中的粘包、精确传输问题,结合实例形式分析了Python socket连接中的粘包、精确传输相关问题原因、解决方案与操作注意事项,需要的朋友可以参考下
    2020-03-03
  • PyQt5 控件字体样式等设置的实现

    PyQt5 控件字体样式等设置的实现

    这篇文章主要介绍了PyQt5 控件字体样式等设置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • python-图片流传输的思路及示例(url转换二维码)

    python-图片流传输的思路及示例(url转换二维码)

    这篇文章主要介绍了python-图片流传输的思路及示例(url转换二维码),帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • Python自动化办公之Excel拆分与自动发邮件

    Python自动化办公之Excel拆分与自动发邮件

    这篇文章主要何大家分享一个真实的自动化办公案例,即向用户发送带有Excel附件的电子邮件,同时必须按用户从主Excel文件中拆分数据以创建他们自己的特定文件,然后将该文件通过电子邮件发送给正确的用户,感兴趣的可以了解一下
    2022-03-03
  • 基于python使MUI登录页面的美化

    基于python使MUI登录页面的美化

    之前的文章Python用HBuilder创建交流社区APP我们已经在HBuilder上创建的APP ,现HBuilder中已经有了登录页面的相关的html文件,但是按照html已有的页面来看,它缺少外观的美化,本篇文章主要讲的是MUI登录页面的美化。,需要的朋友可以参考一下
    2021-11-11
  • pyecharts绘制仪表盘的实现

    pyecharts绘制仪表盘的实现

    有时候大家想把自己绘制好的可视化图片集中到一个页面,整合成仪表盘,集中给同事或者他人来呈现,但又不知道该怎么做,今天小编就来分享一个pyecharts绘制仪表盘的实现,具有一定的参考价值,感兴趣的可以了解一下
    2021-06-06
  • Python实现二叉排序树与平衡二叉树的示例代码

    Python实现二叉排序树与平衡二叉树的示例代码

    树表查询即借助具有特殊性质的树数据结构进行关键字查找,本文所涉及到的特殊结构性质的树包括:二叉排序树、平衡二叉树。文中详细介绍了二者的实现代码,需要的可以参考一下
    2022-04-04

最新评论