使用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()函数,以检查给定的图像是否为空。