[Python][OpenCV]使用yield應用在影像讀取的好處

閱讀時間約 1 分鐘

yield 在影像處理中也是蠻好用的,特別是當你需要處理大量影像或希望逐步處理影像時。它可以用來生成一個影像流,讓你能夠一次處理一張影像而不需要一次性加載所有影像進記憶體。

yield 是 Python 中的一個關鍵字,用於創建生成器(generator)。

生成器是一種特殊類型的迭代器,允許你逐步生成序列中的值而不是一次性返回整個序列。這種延遲生成的特性對於處理大量數據或需要逐步處理數據的情況非常有用。

本文將比較yield與List儲存影像,所佔用的記憶體大小,來體現使用yield有什麼實質上的好處。


使用yield方法:

import cv2
import os
import numpy as np

def is_ndarray(variable):
return isinstance(variable, np.ndarray)

def process_images_in_directory(directory):
for filename in os.listdir(directory):
if filename.endswith(('.png', '.jpg', '.jpeg', '.bmp')):
img_path = os.path.join(directory, filename)
img = cv2.imdecode(np.fromfile(file=img_path, dtype=np.uint8), cv2.IMREAD_COLOR)

if img is None:
continue
# 進行影像處理,例如轉換為灰階
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 使用 yield 返回處理後的影像
yield gray_img, filename

directory_path = 'D:/crab/照片/寶貝狗狗'
img_generator = process_images_in_directory(directory_path)
for gray_img, filename in img_generator:
# 這裡可以進一步處理影像或顯示影像
if is_ndarray(gray_img):
print(gray_img.shape)
cv2.imshow('Gray_Image', gray_img)
cv2.waitKey(0) # 按任意鍵繼續
cv2.destroyAllWindows()

使用列表儲存影像

將所有影像讀取後存到一個列表中,然後進行後續處理:

import cv2
import os
import numpy as np

def process_images_in_directory(directory):
images = []
filenames = []
for filename in os.listdir(directory):
if filename.endswith(('.png', '.jpg', '.jpeg', '.bmp')):
img_path = os.path.join(directory, filename)
img = cv2.imdecode(np.fromfile(file=img_path, dtype=np.uint8), cv2.IMREAD_COLOR)

if img is None:
continue

# 進行影像處理,例如轉換為灰階
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

images.append(gray_img)
filenames.append(filename)

return images, filenames

directory_path = 'D:/crab/照片/寶貝狗狗'
images, filenames = process_images_in_directory(directory_path)

for gray_img, filename in zip(images, filenames):
if is_ndarray(gray_img):
print(f"{filename} 的形狀: {gray_img.shape}")
cv2.imshow('Gray_Image', gray_img)
cv2.waitKey(0) # 按任意鍵繼續
cv2.destroyAllWindows()

結論

但兩種方法,使用tracemalloc來分析佔用的記憶體大小,使用yield的方法比較省記憶體

raw-image


tracemalloc其他文章
[Python]使用tracemalloc 模組來比較兩種不同方法所佔用的記憶體大小



112會員
172內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
透過 Python 的 tracemalloc 模組來比較兩種方法在執行過程中佔用的記憶體大小。以下是兩者的記憶體佔用比較範例。 程式說明 tracemalloc.start():開始追踪記憶體分配。 tracemalloc.get_traced_memory():返回當前和峰值的記憶體使用量
現在有一推AI網站提供模糊圖片變高清的工具,Google關鍵字一下就一推了,例如MyEdit,Artguru等等。 Python的OpenCV有提供一個DnnSuperResImpl Class Reference,也可以做到這件事,就讓我們繼續往下看吧。 在OpenCV DnnSuperRe
現在的圖片都蠻大張的,若整張丟下去做AVI檢測,相對的時間會要比較久一點,事先擷取出感興趣的區域來檢測,就會縮短整個測試的時間。 本文主要提供一個擷取ROI的函式。 從圖片中裁剪出指定的感興趣區域(ROI)。 def crop_img(img, x, y, h, w): """
本文延續上兩篇文章,新增印出圖像中OCR的面積及位置,與驗證連通域分析計算的面積是否正確,利用cv2.countNonZero來計算區域內非零的元素,因圖像OCR在連通域分析前就需轉換成黑底白字,剛好可利用此函數來計算面積。 [OpenCV][Python]印出圖像中文字的位置及高寬 結果圖
在tesseract-ocr辨識應用中,建議的留白邊框為10pixl,若Label列印的太剛好,沒有任何的邊框時,就會辨識不到文字。 本文將帶大家如何讓圖像增加邊框。 結果圖 示意的比較誇張,我讓邊框增加100pixl,圖片大小原為211*80。
本文將說明如何去辨識出圖片文字​位置及高寬。
透過 Python 的 tracemalloc 模組來比較兩種方法在執行過程中佔用的記憶體大小。以下是兩者的記憶體佔用比較範例。 程式說明 tracemalloc.start():開始追踪記憶體分配。 tracemalloc.get_traced_memory():返回當前和峰值的記憶體使用量
現在有一推AI網站提供模糊圖片變高清的工具,Google關鍵字一下就一推了,例如MyEdit,Artguru等等。 Python的OpenCV有提供一個DnnSuperResImpl Class Reference,也可以做到這件事,就讓我們繼續往下看吧。 在OpenCV DnnSuperRe
現在的圖片都蠻大張的,若整張丟下去做AVI檢測,相對的時間會要比較久一點,事先擷取出感興趣的區域來檢測,就會縮短整個測試的時間。 本文主要提供一個擷取ROI的函式。 從圖片中裁剪出指定的感興趣區域(ROI)。 def crop_img(img, x, y, h, w): """
本文延續上兩篇文章,新增印出圖像中OCR的面積及位置,與驗證連通域分析計算的面積是否正確,利用cv2.countNonZero來計算區域內非零的元素,因圖像OCR在連通域分析前就需轉換成黑底白字,剛好可利用此函數來計算面積。 [OpenCV][Python]印出圖像中文字的位置及高寬 結果圖
在tesseract-ocr辨識應用中,建議的留白邊框為10pixl,若Label列印的太剛好,沒有任何的邊框時,就會辨識不到文字。 本文將帶大家如何讓圖像增加邊框。 結果圖 示意的比較誇張,我讓邊框增加100pixl,圖片大小原為211*80。
本文將說明如何去辨識出圖片文字​位置及高寬。
你可能也想看
Thumbnail
八十-二十法則提到,在多數生活的現象中,約80%的效果是來自於20%的原因,除了經濟學、學習理論外,這個法則同樣也可以應用在生活中的幸福感上。 我們需要認知到擁有的越多不一定會越快樂,反而有可能會因為無法專注在少數事物上而產生空虛、迷茫的感覺。「極簡」精神最重要的一點在於放下對於「多」的執著,將有
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
本文探討了影像生成模型的多種應用,包括文字、圖像和聲音到影片的生成,涵蓋了GAN、Transformer和Diffusion等技術。透過回顧相關研究,分析影像生成技術的未來趨勢與挑戰,為讀者提供全面的理解與啟示。
Thumbnail
在影像處理中,有時候我們只想特別關注某個感興趣的區域時,就是ROI的概念,擷取此範圍的圖像來做處理。 設定超過圖像邊界時就會報錯,本文主要介紹如何擷取影像的同時,避免設定錯誤造成程式崩潰的狀況。 擷取圖像示意圖 ROI程式範例 import cv2 import numpy as np
Thumbnail
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
Thumbnail
此篇調查論文探討了Diffusion模型在文字、圖片和聲音轉換為影片,以及影片衍生和編輯的應用類型。作者也介紹了U-Net架構和Vision Transformer等生成圖像架構,並詳細探討了訓練模型的方法以及不同的影像資料集來源。
Thumbnail
文章中,我們介紹了幾款免費的AI影片製作工具,並提供了使用教學和技巧。無論是Lumen5、Pictory、Canva、Kapwing、CapCut還是FlexClip,這些工具都能幫助你高效地實現影片製作目標。此外,我們還介紹了一些其他輔助工具,如AI配音工具和AI繪圖工具,讓您可以更豐富地製作影片
Thumbnail
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
Thumbnail
本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
Thumbnail
影片剪輯比較複雜 創作者不但要能文能武,還需要會影片剪輯。影片剪輯說起來就比較複雜,因為牽涉到比較多的面向。剛開始入手的時候很難理解,不過了解系統架構以後,其實也就那麼一回事。但是總得來說,耗時相對要多很多,比起一般的文章或繪圖,你也可能要耗時許多,因為他的素材就是比較多。 聲音素材、圖片素材、
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
Thumbnail
八十-二十法則提到,在多數生活的現象中,約80%的效果是來自於20%的原因,除了經濟學、學習理論外,這個法則同樣也可以應用在生活中的幸福感上。 我們需要認知到擁有的越多不一定會越快樂,反而有可能會因為無法專注在少數事物上而產生空虛、迷茫的感覺。「極簡」精神最重要的一點在於放下對於「多」的執著,將有
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
本文探討了影像生成模型的多種應用,包括文字、圖像和聲音到影片的生成,涵蓋了GAN、Transformer和Diffusion等技術。透過回顧相關研究,分析影像生成技術的未來趨勢與挑戰,為讀者提供全面的理解與啟示。
Thumbnail
在影像處理中,有時候我們只想特別關注某個感興趣的區域時,就是ROI的概念,擷取此範圍的圖像來做處理。 設定超過圖像邊界時就會報錯,本文主要介紹如何擷取影像的同時,避免設定錯誤造成程式崩潰的狀況。 擷取圖像示意圖 ROI程式範例 import cv2 import numpy as np
Thumbnail
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
Thumbnail
此篇調查論文探討了Diffusion模型在文字、圖片和聲音轉換為影片,以及影片衍生和編輯的應用類型。作者也介紹了U-Net架構和Vision Transformer等生成圖像架構,並詳細探討了訓練模型的方法以及不同的影像資料集來源。
Thumbnail
文章中,我們介紹了幾款免費的AI影片製作工具,並提供了使用教學和技巧。無論是Lumen5、Pictory、Canva、Kapwing、CapCut還是FlexClip,這些工具都能幫助你高效地實現影片製作目標。此外,我們還介紹了一些其他輔助工具,如AI配音工具和AI繪圖工具,讓您可以更豐富地製作影片
Thumbnail
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
Thumbnail
本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
Thumbnail
影片剪輯比較複雜 創作者不但要能文能武,還需要會影片剪輯。影片剪輯說起來就比較複雜,因為牽涉到比較多的面向。剛開始入手的時候很難理解,不過了解系統架構以後,其實也就那麼一回事。但是總得來說,耗時相對要多很多,比起一般的文章或繪圖,你也可能要耗時許多,因為他的素材就是比較多。 聲音素材、圖片素材、
Thumbnail
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉