opencv阈值THRESH_BINARY对彩色图像有什么作用?

时间:2017-09-06 09:32:56

标签: python opencv image-processing image-thresholding

THRESH_BINARY上的

The documentation说:

dst(x,y) = maxval if src(x,y) > thresh else 0

对我而言并不意味着这不会影响彩色图像。我预计即使应用于彩色图像也会产生双色输出,但输出是多色的。为什么?如果像素x,y被合并的可能值仅为maxval0,那该怎么办?

示例:

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()

enter image description here

2 个答案:

答案 0 :(得分:3)

分别应用于每个颜色通道的阈值处理。如果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)。

答案 1 :(得分:3)

假设您的3像素RGB图像的像素值为rgb(66, 134, 244)。现在假设您提供thresh135。您认为会发生什么?

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