NumPy?ROI區(qū)域操作的詳細(xì)教程
ROI = Region of Interest(感興趣區(qū)域),在 OpenCV/圖像處理中就是截取圖片的一部分,NumPy 數(shù)組的切片語(yǔ)法是核心!
先記住核心規(guī)則(最重要)
數(shù)組[ 起始行 : 結(jié)束行 , 起始列 : 結(jié)束列 ]
對(duì)應(yīng)圖像:
img[ y1:y2 , x1:x2 ]
- 行 = 高度 = y 軸
- 列 = 寬度 = x 軸
一、入門(mén):最簡(jiǎn)單的 ROI 截取
import numpy as np
# 創(chuàng)建一個(gè) 6x6 測(cè)試數(shù)組(模擬圖像)
img = np.arange(36).reshape(6,6)
print("原始數(shù)組:")
print(img)
# ====================
# 【入門(mén)1】截取固定區(qū)域 ROI
# ====================
# 截取 行1~行4,列2~列5
roi = img[1:5, 2:6]
print("\n截取 ROI(行1-4,列2-5):")
print(roi)
二、基礎(chǔ):彩色圖像(3通道)ROI
# 創(chuàng)建 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通道)
三、進(jìn)階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] # 全部賦值 # 查看原圖 → 已經(jīng)被修改! print(img[50,50]) # [0,0,255]
四、進(jìn)階2:復(fù)制 ROI(獨(dú)立副本,不影響原圖)
# 方法1:.copy() roi = img[50:150,50:150].copy() # 方法2:np.copy() roi = np.copy(img[50:150,50:150]) # 現(xiàn)在修改 roi 不會(huì)影響原圖! roi[:,:] = [0,255,0]
五、高階1:ROI 疊加 / 粘貼
import numpy as np # 創(chuàng)建大圖 + 小圖 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 按條件提?。ㄑ诖a提取)
img = np.random.randint(0,255,(200,200,3), np.uint8) # 提取紅色通道 > 100 的區(qū)域 mask = img[:,:,2] > 100 # 只保留滿足條件的區(qū)域 roi = img[mask]
七、高階3:ROI 邊緣擴(kuò)展(padding)
# 給ROI周?chē)?0像素黑色邊框 img = np.zeros((200,200,3), np.uint8) roi = img[50:100,50:100] # 上下左右各擴(kuò)展10像素,填充黑色 roi_pad = np.pad(roi, ((10,10),(10,10),(0,0)), mode='constant')
八、高階4:ROI 批量裁剪(循環(huán)批量截?。?/h2>
img = np.zeros((500,500,3), np.uint8)
rois = []
# 循環(huán)截取多個(gè)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)
img = np.zeros((500,500,3), np.uint8)
rois = []
# 循環(huán)截取多個(gè)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)
九、超實(shí)用:OpenCV 圖像 ROI 完整示例
import cv2
import numpy as np
# 讀取圖片
img = cv2.imread("test.jpg")
height, width = img.shape[:2]
# ====================
# 1. 截取人臉區(qū)域(模擬)
# ====================
x1, y1 = 100, 80
x2, y2 = 300, 350
face_roi = img[y1:y2, x1:x2]
# ====================
# 2. 把ROI區(qū)域調(diào)亮
# ====================
face_roi = cv2.add(face_roi, 50)
# ====================
# 3. 粘貼回原圖
# ====================
img[y1:y2, x1:x2] = face_roi
# 顯示
cv2.imshow("ROI結(jié)果", img)
cv2.waitKey(0)
十、ROI 常見(jiàn)錯(cuò)誤總結(jié)
- 越界報(bào)錯(cuò)
img[500:600, 100:200] # 圖片只有400高,會(huì)報(bào)錯(cuò)
- 形狀不匹配
img[50:100,50:100] = roi # roi必須是 50x50
- 修改ROI同步改原圖
→ 必須用.copy()
最終總結(jié)(最核心)
# 截取 roi = img[y1:y2, x1:x2] # 獨(dú)立副本 roi = img[...].copy() # 粘貼 img[y1:y2, x1:x2] = roi # 通道 roi = img[..., 2] # 紅色通道
到此這篇關(guān)于NumPy ROI區(qū)域操作的詳細(xì)教程的文章就介紹到這了,更多相關(guān)NumPy ROI區(qū)域操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python MNIST手寫(xiě)體識(shí)別詳解與試練
MNIST(官方網(wǎng)站)是非常有名的手寫(xiě)體數(shù)字識(shí)別數(shù)據(jù)集,在Tensorflow的官方網(wǎng)站里,第一個(gè)就拿它來(lái)做實(shí)戰(zhàn)講解,咱們也以此作為開(kāi)始的項(xiàng)目2021-11-11
深入理解Python閉包與裝飾器從入門(mén)到進(jìn)階
本文詳細(xì)介紹了Python編程中的閉包和裝飾器,詳細(xì)講述了裝飾器的概念、格式及各種應(yīng)用場(chǎng)景,強(qiáng)調(diào)了閉包和裝飾器在Python編程中的重要性和實(shí)際應(yīng)用,感興趣的朋友跟隨小編一起看看吧2026-04-04
Python批量查找包含多個(gè)關(guān)鍵詞的PDF文件
在信息爆炸的時(shí)代,數(shù)據(jù)管理變得愈發(fā)重要,本文主要為大家介紹了如何通過(guò)Python批量查找包含多個(gè)關(guān)鍵詞的PDF文件,希望對(duì)大家有所幫助2024-11-11
python manim實(shí)現(xiàn)排序算法動(dòng)畫(huà)示例
這篇文章主要為大家介紹了python manim實(shí)現(xiàn)排序算法動(dòng)畫(huà)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Python實(shí)現(xiàn)自動(dòng)生成高質(zhì)量文章的示例代碼
在當(dāng)今內(nèi)容為王的時(shí)代,自媒體創(chuàng)作者們面臨著巨大的內(nèi)容生產(chǎn)壓力,每天需要產(chǎn)出大量高質(zhì)量文章來(lái)吸引讀者,下面我們就來(lái)看看如何僅用50行Python代碼打造一個(gè)自動(dòng)文章生成器吧2025-06-06
基于Python+PyQt5打造一個(gè)跨平臺(tái)Emoji表情管理神器
在當(dāng)今數(shù)字化社交時(shí)代,Emoji已成為全球通用的視覺(jué)語(yǔ)言,本文主要為大家詳細(xì)介紹了如何使用Python和PyQt5開(kāi)發(fā)一個(gè)功能全面的Emoji工具箱,需要的可以了解下2025-06-06
python爬取拉勾網(wǎng)職位數(shù)據(jù)的方法
這篇文章主要介紹了python爬取拉勾網(wǎng)職位數(shù)據(jù)的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Python tkinter布局與按鈕間距設(shè)置方式
這篇文章主要介紹了Python tkinter布局與按鈕間距設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03

