2017-09-06 2 views
1

The documentation auf THRESH_BINARY sagt:Was bewirkt der opencv Threshold THRESH_BINARY bei farbigen Bildern?

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

mir Was nicht bedeutet jedoch, dass dies nicht auf farbigen Bildern arbeiten. Ich erwartete eine zweifarbige Ausgabe, selbst wenn sie auf ein Farbbild angewendet wurde, aber die Ausgabe ist mehrfarbig. Warum? Wie kann das sein, wenn die möglichen Werte der Pixel x,y nur maxval und sind?

Beispiel:

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

Antwort

3

Thresholding auf jeden Farbkanal angewendet wird, getrennt. Wenn der Schwellenwert kleiner ist, wird der Farbkanal auf 0 gesetzt, wenn nicht, dann auf maxval. Kanäle unabhängig voneinander verarbeitet, deshalb ist das Ergebnis ein Farbbild mit mehreren Farben. Die Farben, die Sie bekommen können, sind: (0,0,0), (255,0,0), (0,255,0), (255,255,0), (0,0,255), (255,0,255) und (255,255,255) .

+0

Oh, ich verstehe. Vielen Dank! –

2

Angenommen, Sie haben Pixel aus 3-Kanal-RGB-Bild mit Werten rgb(66, 134, 244). Angenommen, Sie geben thresh Wert 135. Was denkst du wird passieren?

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 

Neuer Pixelwert ist rgb(0, 0, 255). Da Ihr Bild ein RGB-Farbbild ist, ist die Pixelfarbe jetzt BLUE anstelle von .

Verwandte Themen