【问题标题】:Change the background color to black将背景颜色更改为黑色
【发布时间】:2020-04-03 16:58:35
【问题描述】:

我想把这个背景变成原来的黑色。这个背景不是纯黑色。它的值包含 1、2 或 3。使用以下代码后,我得到的背景值非常接近黑色,但不是黑色。虽然背景看起来是黑色的

img = cv2.imread("images.bmp")

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 0, 255, cv2. THRESH_BINARY)

img[thresh == 5] = 0

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
erosion = cv2.erode(img, kernel, iterations = 1)

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow("image", erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

【问题讨论】:

标签: python image numpy opencv


【解决方案1】:

尝试替换这个:

ret, thresh = cv2.threshold(gray, 0, 255, cv2. THRESH_BINARY)

img[thresh == 5] = 0

用这个:

# threshold to 10% of the maximum
threshold = 0.10 * np.max(img)
img[gray <= threshold] = 0

问题是cv2.threshold() 不会为您计算阈值,而是应用一个阈值,例如,您的代码中的thresh 已经是阈值图像。

(已编辑)

【讨论】:

  • 这可能还会将感兴趣区域内的一些暗像素设置为黑色,而不仅仅是在背景中。
  • @Georgy 当然会针对某些像素,具体取决于阈值。
  • @tania true,一般来说。您的输入也是如此吗?您的方法遇到同样的问题。如果您想以不同的方式描述像素值之外的“背景”,您至少应该在问题中提供一些关于您希望被视为“背景”的见解。
  • 如何只选择背景?
【解决方案2】:

据我所知,这应该可以解决您的问题。

import cv2

gray = cv2.imread(r"brain.png", cv2.IMREAD_GRAYSCALE)

thresh_val = 5
gray[gray < thresh_val] = 0

除此之外,请注意

ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)

基本上是将整个图像设置为 255,因为第二个参数是阈值,高于阈值的每个像素都设置为第三个值,即 255。

【讨论】:

  • 谢谢,它把背景值变成了0,同时也影响了物体。
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 2015-05-30
  • 2021-08-18
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 2016-08-17
相关资源
最近更新 更多