我正在检查某人的代码,我得到的东西很少:
在某些品牌标签中为条形码创建遮罩后,需要创建该遮罩的阈值图像(因为当我们看到的图像看起来相同时)和
然后使用cv2.normalize()对阈值图像进行归一化,归一化函数实际上会做什么
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)
ret,barcode_mask_thresh = cv2.threshold(mask,127,255,cv2.THRESH_BINARY)
cropped_barcode_mask = cv2.normalize(src=barcode_mask_thresh, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)
答案 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),否则在任何情况下结果都将与相同,因此不需要。