当我们通过mask的阈值图像时,cv2.normalize实际做什么?

时间:2019-07-18 11:24:25

标签: python opencv image-processing

我正在检查某人的代码,我得到的东西很少:

  1. 在某些品牌标签中为条形码创建遮罩后,需要创建该遮罩的阈值图像(因为当我们看到的图像看起来相同时)和

  2. 然后使用cv2.normalize()对阈值图像进行归一化,归一化函数实际上会做什么

1)创建遮罩:

import imutils
import cv2
import numpy as np

image = cv2.imread("/home/nayantara/Desktop/beinghuman.jpg")
mask = np.zeros(image.shape, dtype = "uint8")
cv2.rectangle(mask, (700, 1038), (1733 , 2111),(255,255,255),-1)

2)获取掩码阈值:

ret,barcode_mask_thresh = cv2.threshold(mask,127,255,cv2.THRESH_BINARY)

3)归一化阈值图像:

cropped_barcode_mask = cv2.normalize(src=barcode_mask_thresh, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)

1 个答案:

答案 0 :(得分:1)

当您具有由

完成的阈值图像时
ret,barcode_mask_thresh = cv2.threshold(mask,127,255,cv2.THRESH_BINARY)

您将只有2个可能的值,即0或255(至少在这种情况下)。然后,当您使用NORM_MIN_MAX进行归一化时,您将获得数组/图像的最小值和最大值,并重新缩放数组,以使最小值为可能的最小值,最大值为最大值。可能。

作为示例,考虑以下数字数组:

eg = np.array([10, 20, 30, 10, 45, 90])

如果进行归一化,算法将缩放它们以适合整个范围,这意味着,最小的最小值为10,可能的最小值为0,最大的最小值为90,即255。如果这样做:

cv2.normalize(eg, dst=None, alpha=0, beta=255,norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)

我们得到:

array([[  0], [ 32], [ 64], [  0], [112], [255]], dtype=uint8)

回到您的具体情况,您只能有2个可能的数字,这些数字已经是可能的最小值和可能的最大值,从而导致3种可能的情况。

1)您的数组中有0和255 ,就像这样:

eg = np.array([0, 255, 0, 255, 255])
cv2.normalize(eg, dst=None, alpha=0, beta=255,norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)

给出:

array([[  0], [ 255], [ 0], [  255], [255]], dtype=uint8)

2)所有数字均为0 ,最小值和最大值相同,结果将为0的数组。

3)所有数字均为255 ,最小和最大相同,再次给出的数字将仅为0。


最重要的是,此功能对于这种情况基本上是无用的,除非您希望将完全白色的图像转换为黑色的图像(所有数字均为255并将其转换为0),否则在任何情况下结果都将与相同,因此不需要。