2016-09-03 2 views
1

Я новичок в Python OpenCV. Я читал некоторые документы и ответы here, но я не могу понять, что означает, что следующий код:Как увеличить контрастность изображения в Python OpenCV

if (self.array_alpha is None): 
    self.array_alpha = np.array([1.25]) 
    self.array_beta = np.array([-100.0]) 

# add a beta value to every pixel 
cv2.add(new_img, self.array_beta, new_img)      

# multiply every pixel value by alpha 
cv2.multiply(new_img, self.array_alpha, new_img) 

Я пришел, чтобы узнать, что Basically, every pixel can be transformed as X = aY + b where a and b are scalars.. В принципе, я это понял. Однако я не понял код и как увеличить контраст с этим.

До сих пор мне удалось просто считывать изображение с помощью img = cv2.imread('image.jpg',0)

Спасибо за вашу помощь

ответ

3

Лучшее объяснение X = aY + b (на самом деле это f(x) = ax + b)) предоставляется на https://math.stackexchange.com/a/906280/357701

Simpler один, просто регулируя яркость/яркость/яркость для контраста, как показано ниже:

import cv2 

img = cv2.imread('test.jpg') 
cv2.imshow('test', img) 
cv2.waitKey(1000) 
imghsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 


imghsv[:,:,2] = [[max(pixel - 25, 0) if pixel < 190 else min(pixel + 25, 255) for pixel in row] for row in imghsv[:,:,2]] 
cv2.imshow('contrast', cv2.cvtColor(imghsv, cv2.COLOR_HSV2BGR)) 
cv2.waitKey(1000) 
raw_input() 
6

Я хотел бы предложить метод, использующий цветной канал LAB. В Википедии достаточно информации о том, что такое цветной канал LAB.

я сделал следующее, используя OpenCV 3.0.0 и Python:

import cv2 

#-----Reading the image----------------------------------------------------- 
img = cv2.imread('Dog.jpg', 1) 
cv2.imshow("img",img) 

#-----Converting image to LAB Color model----------------------------------- 
lab= cv2.cvtColor(img, cv2.COLOR_BGR2LAB) 
cv2.imshow("lab",lab) 

#-----Splitting the LAB image to different channels------------------------- 
l, a, b = cv2.split(lab) 
cv2.imshow('l_channel', l) 
cv2.imshow('a_channel', a) 
cv2.imshow('b_channel', b) 

#-----Applying CLAHE to L-channel------------------------------------------- 
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8)) 
cl = clahe.apply(l) 
cv2.imshow('CLAHE output', cl) 

#-----Merge the CLAHE enhanced L-channel with the a and b channel----------- 
limg = cv2.merge((cl,a,b)) 
cv2.imshow('limg', limg) 

#-----Converting image from LAB Color model to RGB model-------------------- 
final = cv2.cvtColor(limg, cv2.COLOR_LAB2BGR) 
cv2.imshow('final', final) 

#_____END_____# 

Вы можете запустить код, как это. Чтобы узнать, что такое CLAHE (Contrast Limited Adaptive Histogram Equalization), вы можете снова проверить Википедию.

Смежные вопросы