【问题标题】:Converting pixels colour creates noise转换像素颜色会产生噪点
【发布时间】:2021-06-04 02:57:54
【问题描述】:

只是一个简单的问题: 我正在加载黑白图像,然后用其他颜色替换黑色和/或白色像素。问题是,当我将编辑后的图像可视化时,白色部分周围有一些黑色像素,例如噪点。

输入图像:

这是我如何遍历像素:

img1_black[np.where((img1_black == [0, 0, 0]).all(axis=2))] = [0, 255, 0]
cv2.imshow("Result4", img1_black)

第二种迭代方法:

img1_black_pixels_mask = np.all(mask_1 == [0, 0, 0], axis=-1)
img1_non_black_pixels_mask = np.any(mask_1 != [0, 0, 0], axis=-1)
img1_black[img1_black_pixels_mask] = [0, 0, 255]
img1_black[img1_non_black_pixels_mask] = [0, 255, 0]
plt.imshow(img1_black)
plt.show()

第一个输出图像

第二个输出图像

【问题讨论】:

  • 您正在处理灰度图像(值在 [0-255] 范围内),但只屏蔽了完全黑色的像素(范围 [0])。白色斑点周围的像素几乎完全是黑色像素(范围 [1-20])。尝试先对图像进行阈值处理,然后应用其余代码。见this
  • 是的,就是这样。感谢您的回答!

标签: python numpy opencv matplotlib computer-vision


【解决方案1】:

这会对你有所帮助。

import cv2
import numpy as np

image = cv2.imread("pmjpl.jpg")

gray_scale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, threshold_image = cv2.threshold(gray_scale, 100, 255, cv2.THRESH_BINARY)
cv2.imshow("threshold_image", threshold_image)

colour_image = cv2.cvtColor(threshold_image, cv2.COLOR_GRAY2BGR)

mask = colour_image[:, :, 0] == 255  # mask for white pixels
colour_image[mask] = [0, 0, 255]  # fill red colour for white pixels

mask = colour_image[:, :, 2] == 0  # mask for black pixels
colour_image[mask] = [0, 255, 0]  # fill green colour for white pixels

cv2.imshow("colour_image", colour_image)

cv2.waitKey(0)
cv2.destroyAllWindows()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-10
    • 2015-08-09
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多