【感兴趣区域ROI】

目录

代码:

1. 代码逐行解读

第一段代码

输出结果:

第二段代码

输出结果:

2. 重点知识:ROI(Region of Interest,感兴趣区域)

(1) ROI是什么?

(2) 如何操作ROI?

(3) 代码中的ROI操作

(4) 关键注意事项

3. 总结与扩展

核心总结

应用场景

常见错误

扩展练习


代码:

import cv2
import numpy as np

img = cv2.imread(r"F:\tp\lena.jpg")

b = np.ones((101, 101, 3))
b = img[150:250, 250:350]
img[0:100, 0:100] = b
cv2.imshow("img", img)

cv2.imshow("face", b)
cv2.waitKey(0)
cv2.destroyAllWindows()
# ====================================
img = cv2.imread(r"F:\tp\lena.jpg")
fy = cv2.imread(r"F:\tp\kt.jpg")

b = np.ones((101, 101, 3))
b = img[150:250, 250:350]
img[0:100, 0:100] = b
fy[0:100, 0:100] = b
cv2.imshow("img", fy)
cv2.waitKey(0)
cv2.destroyAllWindows()

1. 代码逐行解读

第一段代码
import cv2
import numpy as np

# 读取图像(默认加载为BGR彩色图)
img = cv2.imread(r"F:\tp\lena.jpg")

# 创建一个形状为(101,101,3)的全1数组(初始化为白色,因为BGR中[1,1,1]是白色)
b = np.ones((101, 101, 3))  # 注意:实际会被后续代码覆盖

# 截取图像中的ROI区域:从行150到249,列250到349(100x100区域)
b = img[150:250, 250:350]

# 将ROI复制到原图左上角0:99行和0:99列的位置
img[0:100, 0:100] = b

# 显示修改后的图像和ROI区域
cv2.imshow("img", img)  # 左上角出现ROI的复制块
cv2.imshow("face", b)   # 单独显示截取的ROI区域
cv2.waitKey(0)          # 按任意键关闭窗口
cv2.destroyAllWindows()
输出结果:
第二段代码
# 重新读取原图和另一张图像(kt.jpg)
img = cv2.imread(r"F:\tp\lena.jpg")
fy = cv2.imread(r"F:\tp\kt.jpg")

# 重复之前的ROI截取操作
b = np.ones((101, 101, 3))  # 无用代码,会被覆盖
b = img[150:250, 250:350]   # 截取lena.jpg的ROI

# 将ROI复制到原图和另一张图fy的左上角
img[0:100, 0:100] = b   # 修改原图(未显示)
fy[0:100, 0:100] = b    # 修改另一张图fy

# 显示修改后的fy图像(原图未显示)
cv2.imshow("img", fy)    # fy的左上角出现lena的ROI
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果:


2. 重点知识:ROI(Region of Interest,感兴趣区域)

(1) ROI是什么?
  • 定义:图像中的一个子区域,通常是需要重点处理或分析的部分(如人脸、文字区域等)。

  • 作用:减少计算量,聚焦关键信息,常用于图像裁剪、局部修复、特征提取等。

(2) 如何操作ROI?
  • 截取ROI:通过 数组切片 直接提取区域。

    # 语法:img[y1:y2, x1:x2]
    roi = img[150:250, 250:350]  # 行范围150-249,列范围250-349(100x100区域)
    • 注意:切片区间是左闭右开(如150:250包含150,不包含250)。

  • 粘贴ROI:将ROI复制到其他位置或其他图像。

    # 目标区域必须与ROI尺寸一致!
    img[0:100, 0:100] = roi  # 将ROI粘贴到左上角
(3) 代码中的ROI操作
  • 第一段代码

    • lena.jpg中截取一个100x100的ROI(如眼睛区域)。

    • 将该ROI复制到原图的左上角,形成“重复的局部图像”。

  • 第二段代码

    • 将同样的ROI粘贴到另一张图像kt.jpg的左上角,实现“图像混合”。

(4) 关键注意事项
  1. 尺寸匹配
    目标区域的大小必须与ROI完全一致,否则报错(如尝试将100x100的ROI粘贴到90x90的区域)。

  2. 颜色通道

    • 彩色图ROI形状为 (h, w, 3),灰度图则为 (h, w)

    • 如果目标区域通道数不匹配(如彩色ROI粘贴到灰度图),会导致错误。

  3. 越界问题

    • 截取ROI时需确保原图足够大(如原图尺寸不足250行或350列会报错)。

  4. 数据类型

    • ROI和目标区域的像素类型(如uint8)需一致,否则可能丢失精度。


3. 总结与扩展

核心总结
操作语法示例说明
截取ROIroi = img[y1:y2, x1:x2]切片区间左闭右开,注意行列顺序
粘贴ROItarget[y1:y2, x1:x2] = roi目标区域尺寸必须与ROI完全一致
跨图操作img2[...] = img1[...]支持不同图像间的ROI复制
应用场景
  1. 局部修复:用周围像素覆盖图像中的水印或噪点。

  2. 图像合成:将一张图的ROI粘贴到另一张图中(如表情包制作)。

  3. 目标检测:对检测到的物体区域(ROI)进行单独处理。

常见错误
  • 尺寸不匹配

    # 错误示例:ROI是100x100,目标区域是90x90
    img[0:90, 0:90] = roi  # 报错:无法广播
  • 通道不匹配

    # 错误示例:彩色ROI粘贴到灰度图
    gray_img[0:100, 0:100] = roi  # 报错:维度不匹配
扩展练习
  1. 动态ROI选择:用鼠标交互选择ROI区域(需结合OpenCV的鼠标回调函数)。

  2. ROI缩放:将截取的ROI放大或缩小后粘贴到目标位置。

  3. 多ROI操作:同时处理图像中的多个ROI区域(如批量添加马赛克)。


通过这段代码,掌握了图像处理中 ROI操作 的核心方法,这是图像编辑、计算机视觉任务的基础技能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值