[Python ]在影像處理中使用 raise 關鍵字手動觸發錯誤

更新 發佈閱讀 1 分鐘

在 Python 中,你可以使用 raise 關鍵字手動觸發錯誤。這對於測試異常處理或在特定情況下停止程式執行非常有用。

本文主說明在影像處理中常見的異常情況,展示如何使用 raise 來觸發不同類型的錯誤。


1. 檔案不存在 (FileNotFoundError)

在影像處理中,如果要讀取的影像檔案不存在,可以手動觸發 FileNotFoundError

import cv2

def load_image(file_path):
image = cv2.imread(file_path)
if image is None:
raise FileNotFoundError(f"檔案不存在: {file_path}")
return image

try:
img = load_image("non_existent_image.jpg")
except FileNotFoundError as e:
print(f"捕捉到錯誤: {e}")



vocus|新世代的創作平台


2. 不支持的影像格式 (ValueError)

當影像格式不正確時,你可以手動觸發 ValueError,避免後續處理錯誤。

import cv2

def check_image_format(image, required_channels=3):
if image is None:
raise ValueError("無法讀取影像")
if len(image.shape) != 3 or image.shape[2] != required_channels:
raise ValueError(f"需要 {required_channels} 通道的影像,但得到 {len(image.shape)} 通道")
return True

try:
# 讀取原圖
image = cv2.imread('F:/python/opencv/ball/123_out.png')
# 將圖像轉為灰階
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
check_image_format(gray_image, 3) # 檢查是否為 RGB 三通道影像
except ValueError as e:
print(f"捕捉到錯誤: {e}")
vocus|新世代的創作平台


3. 大小不匹配 (ValueError)

當你處理多張影像且要求影像大小一致時,如果影像尺寸不匹配,可以觸發 ValueError

import cv2

def check_same_size(image1, image2):
if image1.shape != image2.shape:
raise ValueError("影像大小不匹配")
return True

try:
img1 = cv2.imread("image1.jpg")
img2 = cv2.imread("image2.jpg")
check_same_size(img1, img2)
except ValueError as e:
print(f"捕捉到錯誤: {e}")
vocus|新世代的創作平台

4. 無效的參數類型 (TypeError)

當函數參數的類型不正確時,觸發 TypeError

import cv2

def resize_image(image, width, height):
if not isinstance(width, int) or not isinstance(height, int):
raise TypeError("寬度和高度必須是整數")
return cv2.resize(image, (width, height))

try:
img = cv2.imread("example_image.jpg")
resized_img = resize_image(img, "800", 600) # 傳入錯誤類型的寬度
except TypeError as e:
print(f"捕捉到錯誤: {e}")
vocus|新世代的創作平台

5. 影像處理失敗 (RuntimeError)

當某個影像處理操作無法成功執行時,可以手動觸發 RuntimeError

import cv2

def apply_canny_edge_detection(image):
edges = cv2.Canny(image, 100, 200)
if edges is None:
raise RuntimeError("Canny 邊緣檢測失敗")
return edges

try:
img = cv2.imread("example_image.jpg", 1) # 讀取灰階影像
edges = apply_canny_edge_detection(img)
except RuntimeError as e:
print(f"捕捉到錯誤: {e}")
vocus|新世代的創作平台

6. 過多的雜訊 (ValueError)

當影像雜訊過多或不符合預期標準時,可以觸發 ValueError

import cv2
import numpy as np

def check_image_noise_level(image, threshold):
noise_level = np.std(image)
if noise_level > threshold:
raise ValueError(f"影像雜訊過高: {noise_level}, 超過閾值: {threshold}")
return True

try:
img = cv2.imread("noisy_image.jpg", 0)
check_image_noise_level(img, 25)
except ValueError as e:
print(f"捕捉到錯誤: {e}")
vocus|新世代的創作平台

7. 找不到輪廓 (ValueError)

在找不到圖像中的輪廓時,可以手動觸發 ValueError

import cv2

def find_largest_contour(image):
contours, _ = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
if len(contours) == 0:
raise ValueError("無法找到任何輪廓")
largest_contour = max(contours, key=cv2.contourArea)
return largest_contour

try:
img = cv2.imread("example_image.jpg", 0) # 讀取灰階影像
largest_contour = find_largest_contour(img)
except ValueError as e:
print(f"捕捉到錯誤: {e}")
vocus|新世代的創作平台

結論

根據不同的異常情況手動使用 raise 來觸發錯誤。這種方法有助於在影像處理過程中提早發現問題並進行處理,增強程式的穩定性。後續維護debug也比較簡單。

留言
avatar-img
螃蟹_crab的沙龍
168會員
322內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。 興趣是攝影,踏青,探索未知領域。 人生就是不斷的挑戰及自我認清,希望老了躺在床上不會後悔自己什麼都沒做。
螃蟹_crab的沙龍的其他內容
2025/01/01
錯誤訊息 Makefile:221: *** found no data/foo-ground-truth/*.gt.txt for data/foo/all-gt. Stop. 原先指令 ALL_FILES = $(and $(wildcard $(GROUND_TRUTH_DIR)),$
Thumbnail
2025/01/01
錯誤訊息 Makefile:221: *** found no data/foo-ground-truth/*.gt.txt for data/foo/all-gt. Stop. 原先指令 ALL_FILES = $(and $(wildcard $(GROUND_TRUTH_DIR)),$
Thumbnail
2024/10/12
在有次使用cv2.resize時忽然報錯,就心血來潮不想重新安裝OpenCV,根據缺少的東西想辦法補齊。 在影像處理中,Zlib(以及 zlibwapi.dll)主要用於處理數據壓縮和解壓縮,特別是在處理大型影像文件時。 遺失原因 應用程序安裝過程中未能完整安裝所有所需的依賴項,尤其是 zli
Thumbnail
2024/10/12
在有次使用cv2.resize時忽然報錯,就心血來潮不想重新安裝OpenCV,根據缺少的東西想辦法補齊。 在影像處理中,Zlib(以及 zlibwapi.dll)主要用於處理數據壓縮和解壓縮,特別是在處理大型影像文件時。 遺失原因 應用程序安裝過程中未能完整安裝所有所需的依賴項,尤其是 zli
Thumbnail
2024/10/11
在上一篇文章,使用CUDA加速運行OpenCV發現一個異常,抽絲剝繭找到原因了。 [Python]在 OpenCV 中啟用 CUDA 加速來運行 DNN 超分辨率模型 錯誤描述: Could not locate cublas64_11.dll. Please make sure it i
Thumbnail
2024/10/11
在上一篇文章,使用CUDA加速運行OpenCV發現一個異常,抽絲剝繭找到原因了。 [Python]在 OpenCV 中啟用 CUDA 加速來運行 DNN 超分辨率模型 錯誤描述: Could not locate cublas64_11.dll. Please make sure it i
Thumbnail
看更多
你可能也想看
Thumbnail
在 Python 中,你可以使用 raise 關鍵字手動觸發錯誤。這對於測試異常處理或在特定情況下停止程式執行非常有用。 本文主說明在影像處理中常見的異常情況,展示如何使用 raise 來觸發不同類型的錯誤。 1. 檔案不存在 (FileNotFoundError) 在影像處理中,如果要讀取
Thumbnail
在 Python 中,你可以使用 raise 關鍵字手動觸發錯誤。這對於測試異常處理或在特定情況下停止程式執行非常有用。 本文主說明在影像處理中常見的異常情況,展示如何使用 raise 來觸發不同類型的錯誤。 1. 檔案不存在 (FileNotFoundError) 在影像處理中,如果要讀取
Thumbnail
本篇內容介紹如何使用 Python中的 moviepy library 簡單的剪影片。 先安裝moviepy library , 用pip install moviepy , 可參考官方文件。 要剪的影片和python檔要在同個資料夾中,若不在同個位置要用 os library 更換路徑
Thumbnail
本篇內容介紹如何使用 Python中的 moviepy library 簡單的剪影片。 先安裝moviepy library , 用pip install moviepy , 可參考官方文件。 要剪的影片和python檔要在同個資料夾中,若不在同個位置要用 os library 更換路徑
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
在影像處理中,有時候我們只想特別關注某個感興趣的區域時,就是ROI的概念,擷取此範圍的圖像來做處理。 設定超過圖像邊界時就會報錯,本文主要介紹如何擷取影像的同時,避免設定錯誤造成程式崩潰的狀況。 擷取圖像示意圖 ROI程式範例 import cv2 import numpy as np
Thumbnail
在影像處理中,有時候我們只想特別關注某個感興趣的區域時,就是ROI的概念,擷取此範圍的圖像來做處理。 設定超過圖像邊界時就會報錯,本文主要介紹如何擷取影像的同時,避免設定錯誤造成程式崩潰的狀況。 擷取圖像示意圖 ROI程式範例 import cv2 import numpy as np
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
影像和檔案的處理技術已成為設計師的基本功。從精緻的插圖到複雜的版面設計,每一步操作都蘊含著無限的可能性與挑戰。本文將帶領您深入了解如何精準控制影像置入過程中的細節,從而達到既定的設計目標。 精確控制影像置入的技巧 當我們談論將影像或檔案置入Adobe Illustrator或InDesign時,
Thumbnail
影像和檔案的處理技術已成為設計師的基本功。從精緻的插圖到複雜的版面設計,每一步操作都蘊含著無限的可能性與挑戰。本文將帶領您深入了解如何精準控制影像置入過程中的細節,從而達到既定的設計目標。 精確控制影像置入的技巧 當我們談論將影像或檔案置入Adobe Illustrator或InDesign時,
Thumbnail
使用cv2.imread讀取圖片時,如果路徑有包含到中文,就會報錯。 本文將提供另外一個方式cv2.imdecode,路徑有包含到中文時仍可以正常讀取圖片。 測試範例 import cv2 img = cv2.imread('D:/CRABpy/write/圖檔/chars_01.png'
Thumbnail
使用cv2.imread讀取圖片時,如果路徑有包含到中文,就會報錯。 本文將提供另外一個方式cv2.imdecode,路徑有包含到中文時仍可以正常讀取圖片。 測試範例 import cv2 img = cv2.imread('D:/CRABpy/write/圖檔/chars_01.png'
Thumbnail
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
Thumbnail
在某些特殊情況下,需要將圖片進行黑白反轉,例如Tesseract(OCR辨識引擎)就有建議黑底白字的狀況下辨識率較高。 本文將使用 NumPy 進行影像黑白反轉,並顯示反轉前後的影像。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
在影像辨識中,若遇到物件與背景難以分辨的狀況下,先做一下色彩分析,知道了色彩強度階層上的像素數,有助於了解後續需要做什麼處理,比較好分割出辨識物。 若想辨識的物件與背景的RGB值過於接近,也比較好說明此狀況,為什麼較難分割出物件。 成果呈現 第一張圖:左邊為原圖,右邊為分析結果的圖,用其他顏
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News