【问题标题】:Why do I get different results while adding noise to a binary images which have different dtypes为什么在向具有不同 dtype 的二进制图像添加噪声时会得到不同的结果
【发布时间】:2021-08-22 03:38:53
【问题描述】:

我使用以下代码生成图像,然后添加白噪声以最终将形态学运算(打开)应用于最终图像。

**问题 ** - 当我添加带有 UINT8 噪声的 UINT8 图像时,为什么会得到不同的结果(Result-1)

img1 = np.zeros((300,600),np.uint8)
cv2.putText(img1, 'ABCD', org=(100,200), fontFace=cv2.FONT_ITALIC, fontScale=5, color=(255,255,255), thickness=25)

img2 = np.zeros((300,600))
cv2.putText(img2, 'ABCD', org=(100,200), fontFace=cv2.FONT_ITALIC, fontScale=5, color=(255,255,255), thickness=25)


noise1 = np.random.randint(low=0, high=2, size=(300,600), dtype=np.uint8) 
noise2 = np.random.randint(low=0, high=2, size=(300,600)) 

noise1_img1 = img1+(noise1*255) 
noise2_img2 = img2+(noise2*255) 
noise1_img2 = img2+(noise1*255) 
noise2_img1 = img1+(noise2*255) 

结果:

【问题讨论】:

    标签: python-3.x numpy image-processing computer-vision opencv-python


    【解决方案1】:

    Uint8 dtype 本质上仅限于 0 到 255 之间的值。因此,当您将另一个 uint8 值添加到值为 255 的值(在您的情况下为白色文本)时,它不能再高了,并且将上限为 255(忽略下溢/溢出)。

    现在,当您将 uint8 添加到更高位大小的值(float、int、double 等)时,python 固有地将结果转换为更大的位数。因此,如果您有一个 uint8 图像并向其添加 int32 噪声,则结果将能够具有高于 255 的值(您将文本设置为该值)。要删除它,您需要将结果转换为 uint8:

    noise2_img2 = (img2+(noise2*255)).astype(np.uint8)
    

    或将字体的值 (255,255,255) 设置为 int32 的最大值:2,147,483,647!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多