使用 OpenCV Python 檢查影像是否為空


OpenCV 是一個 Python 中的開源計算機視覺庫。它是 Python 中的影像處理庫之一,它使用 Python Numpy 庫,因此所有影像陣列都表示為 ndarray 型別。OpenCV-python 需要 numpy 庫,我們需要確保 numpy 也安裝在我們的 Python 直譯器中。

在本文中,我們將瞭解使用 OpenCV Python 檢查給定影像是否為空的不同方法。讓我們觀察輸入輸出場景,以瞭解如何使用 Python OpenCV 檢查給定影像是否為空。

輸入輸出場景

假設我們有一個空白的輸入影像,在輸出中,我們將看到一個語句,說明給定的影像是否為空。

輸入影像

輸出

Image is empty

讓我們討論一下檢查給定影像是否為空的不同方法。

使用唯一畫素計數

通常,空白/空影像在整個影像中具有更多唯一的畫素值。透過將唯一畫素計數與閾值進行比較,我們可以識別空影像。

示例

在此示例中,我們將使用 np.unique() 方法獲取唯一元素。

import numpy as np
import cv2

def is_empty(img):
   # Reading Image
   image = cv2.imread(img, 0)
   np.reshape(image, (-1,1))
   u, count_unique = np.unique(image, return_counts =True)
   
   if count_unique.size< 10:
      return "Image is empty"
   else:
      return "Image is not empty"

print(is_empty('whh.jpg'))

輸入影像

輸出

Image is empty

使用標準差

空影像的標準差應接近於零。通常,空白/空影像在整個影像中可能具有更均勻的畫素值。我們可以使用標準差計算均勻性程度。如果值低於某個閾值,那麼我們可以說影像為空白。

示例

讓我們獲取一個“blank.png”影像,並透過計算標準差來驗證它。

import numpy as np
import cv2

def is_empty(img):
   # Reading Image
   image = cv2.imread(img, 0)
   np.reshape(image, (-1,1))
   std_dev=np.std(image)
   
   if std_dev < 1:
      return "Image is empty"
   else:
      return "Image is not empty"

print(is_empty('Blank.png'))

輸出

Image is empty 

我們使用了Numpy.std()方法來計算影像畫素值的標準差。

使用畫素值求和

空/黑影像的畫素值為零。如果畫素的總和不等於零,那麼我們可以說給定的影像不為空。如果總和等於零,則給定的影像為空。

示例

最初,我們將使用 numpy.zeros() 方法建立一個空白影像。然後驗證給定的影像是否為空。

import numpy as np
import cv2

blank_image2 = np.zeros((100,100,3), dtype=np.uint8)
cv2.imwrite("result.jpg", blank_image2)

def is_empty(img):
   # Reading Image
   image = cv2.imread(img)
   
   # Checking if the image is empty or not
   if np.sum(image) == 0:
      result = "Image is empty!"
   else:
      result = "Image is not empty!"
   return result

print(is_empty('result.jpg'))

輸出

Image is empty 

結果影像的詳細資訊

結果影像由 numpy 陣列資料的 cv2.imwrite() 方法建立。然後將 result.jpg 影像提供給已定義的 is_empty() 函式,以檢查給定的影像是否為空。

更新於:2023年5月30日

2K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.