opencv threshold THRESH_BINARY 对彩色图像有什么作用?
What does opencv threshold THRESH_BINARY do on colored images?
The documentation 在 THRESH_BINARY
上说:
dst(x,y) = maxval if src(x,y) > thresh else 0
这对我来说并不意味着这不适用于彩色图像。即使应用于彩色图像,我也希望有两种颜色的输出,但输出是多色的。为什么?当分配给像素 x,y
的可能值只有 maxval
和 0
时,这怎么可能?
示例:
from sys import argv
import cv2
import numpy as np
img = cv2.imread(argv[1])
ret, threshold = cv2.threshold(img, 120, 255, cv2.THRESH_BINARY)
cv2.imshow('threshold', threshold)
cv2.imshow('ori', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
阈值分别应用于每个颜色通道。如果小于 tahn 阈值则颜色通道设置为 0,如果不是则设置为 maxval。独立处理的通道,这就是为什么结果是具有多种颜色的彩色图像。可以获得的颜色有:(0,0,0), (255,0,0), (0,255,0), (255,255,0), (0,0,255),(255,0,255), (0,255,255)和 (255,255,255).
假设您有来自 3 通道 RGB 图像的像素,其值为 rgb(66, 134, 244)
。现在假设您给 thresh
值 135
。你认为会发生什么?
r = 66
g = 134
b = 244
if(r > thresh) r = 255 else r = 0; // we have r = 0
if(g > thresh) g = 255 else g = 0; // we have g = 0
if(b > thresh) b = 255 else b = 0; // we have b = 255
新像素值为 rgb(0, 0, 255)
。由于您的图像是 RGB 彩色图像,现在像素颜色是 BLUE
而不是 WHITE
。
The documentation 在 THRESH_BINARY
上说:
dst(x,y) = maxval if src(x,y) > thresh else 0
这对我来说并不意味着这不适用于彩色图像。即使应用于彩色图像,我也希望有两种颜色的输出,但输出是多色的。为什么?当分配给像素 x,y
的可能值只有 maxval
和 0
时,这怎么可能?
示例:
from sys import argv
import cv2
import numpy as np
img = cv2.imread(argv[1])
ret, threshold = cv2.threshold(img, 120, 255, cv2.THRESH_BINARY)
cv2.imshow('threshold', threshold)
cv2.imshow('ori', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
阈值分别应用于每个颜色通道。如果小于 tahn 阈值则颜色通道设置为 0,如果不是则设置为 maxval。独立处理的通道,这就是为什么结果是具有多种颜色的彩色图像。可以获得的颜色有:(0,0,0), (255,0,0), (0,255,0), (255,255,0), (0,0,255),(255,0,255), (0,255,255)和 (255,255,255).
假设您有来自 3 通道 RGB 图像的像素,其值为 rgb(66, 134, 244)
。现在假设您给 thresh
值 135
。你认为会发生什么?
r = 66
g = 134
b = 244
if(r > thresh) r = 255 else r = 0; // we have r = 0
if(g > thresh) g = 255 else g = 0; // we have g = 0
if(b > thresh) b = 255 else b = 0; // we have b = 255
新像素值为 rgb(0, 0, 255)
。由于您的图像是 RGB 彩色图像,现在像素颜色是 BLUE
而不是 WHITE
。