-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathHistograma_Equalizar.py
executable file
·71 lines (54 loc) · 2.47 KB
/
Histograma_Equalizar.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import cv
import sys
class Histograma:
def __init__(self, imagem_fonte):
self.imagem_fonte = imagem_fonte
self.imagem_destino = cv.CloneMat(imagem_fonte)
self.imagemHistograma = cv.CreateImage((512, 100), 8, 1)
self.histograma = cv.CreateHist([512], cv.CV_HIST_ARRAY,[[0, 256]], 1)
self.brilho = 0
self.contraste = 0
cv.NamedWindow("Foto Tons Cinza", 1)
cv.NamedWindow("Foto Equalizada", 1)
cv.NamedWindow("Histograma Equalizado", 1)
cv.CreateTrackbar("Brilho", "Histograma Equalizado", 100, 200, self.atualiza_brilho)
cv.CreateTrackbar("Contraste", "Histograma Equalizado", 100, 200, self.atualiza_contraste)
self.atualiza_brilhocontraste()
def calcularHistograma(self):
cv.CalcArrHist([self.imagem_destino], self.histograma)
valorMaximoMinimo=cv.GetMinMaxHistValue(self.histograma)
cv.Rectangle(self.imagemHistograma,(0,0),(512,100), cv.CV_RGB(0,0,0),-1)
for i in range(512):
valor = cv.QueryHistValue_1D(self.histograma, i)
normalizado = cv.Round(valor * 100 / valorMaximoMinimo[1])
cv.Line(self.imagemHistograma,(i,100),(i,100-normalizado),cv.CV_RGB(255,255,255))
def atualiza_brilho(self, valor):
self.brilho = valor - 100
self.atualiza_brilhocontraste()
def atualiza_contraste(self, valor):
self.contraste = valor - 100
self.atualiza_brilhocontraste()
def atualiza_brilhocontraste(self):
if self.contraste > 0:
delta = 127. * self.contraste / 100
a = 255. / (255. - delta * 2)
b = a * (self.brilho - delta)
else:
delta = -128. * self.contraste / 100
a = (256. - delta * 2) / 255.
b = a * self.brilho + delta
cv.ConvertScale(self.imagem_fonte, self.imagem_destino, a, b)
cv.ShowImage("Foto Tons Cinza", self.imagem_destino)
self.calcularHistograma()
cv.ShowImage("Histograma", self.imagemHistograma)
cv.EqualizeHist(self.imagem_destino,self.imagem_destino)
cv.ShowImage("Foto Equalizada", self.imagem_destino)
self.calcularHistograma()
cv.ShowImage("Histograma Equalizado", self.imagemHistograma)
if __name__ == "__main__":
imagem = cv.LoadImageM('foto.jpg')
cv.NamedWindow("Foto Original", 0)
cv.ShowImage("Foto Original", imagem)
imagem_cinza = cv.GetMat(cv.LoadImage('foto.jpg', 0))
histograma = Histograma(imagem_cinza)
cv.WaitKey(0)