मेरे पास कुछ छवियां हैं जहां मुझे छवि के विपरीत और चमक को गतिशील तरीके से बढ़ाने या घटाने की आवश्यकता है ताकि यह स्पष्ट रूप से दिखाई दे। और कार्यक्रम को गतिशील होने की आवश्यकता है ताकि यह नई छवियों के लिए भी काम करे। मैं यह भी चाहता हूं कि किरदार डार्क हो।

मैं चमक और कंट्रास्ट बढ़ाने में सक्षम था लेकिन यह प्रत्येक छवि के लिए ठीक से काम नहीं कर रहा है।

import cv2

import numpy as np

img = cv2.imread('D:\Bright.png')

image = cv2.GaussianBlur(img, (5, 5), 0)

#image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY)[1]

#kernel = np.ones((2,1),np.uint8)

#dilation = cv2.dilate(img,kernel)

cv2.imshow('test', image)

cv2.waitKey(0)

cv2.destroyAllWindows()

imghsv = cv2.cvtColor(image, 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.imwrite('D:\\112.png',cv2.cvtColor(imghsv, cv2.COLOR_HSV2BGR))

cv2.waitKey(0)

cv2.destroyAllWindows()

#raw_input()

मैं एक ऐसा प्रोग्राम चाहता हूं जो हर छवि के लिए ठीक काम करे और शब्द थोड़े गहरे रंग के हों ताकि वे आसानी से दिखाई दे सकें।

image 1

image 2

image 3

2
Ani 31 मई 2019, 08:07

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि टिलारियन ने सुझाव दिया था, आप यह देखने के लिए "ऑटो ब्राइटनेस एंड कंट्रास्ट" आज़मा सकते हैं कि क्या यह अच्छी तरह से काम करता है। इसके पीछे के सिद्धांत को अच्छी तरह समझाया गया है यहां समाधान अनुभाग में। समाधान सी ++ में है। मैंने इसका एक संस्करण पायथन में लिखा है जिसे आप सीधे उपयोग कर सकते हैं, रंगीन छवियों के लिए एक समय में केवल 1 चैनल पर काम करता है:

def auto_brightandcontrast(input_img, channel, clip_percent=1):
    histSize=180
    alpha=0
    beta=0
    minGray=0
    maxGray=0
    accumulator=[]

    if(clip_percent==0):
        #min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(hist)
        return input_img

    else:
        hist = cv2.calcHist([input_img],[channel],None,[256],[0, 256])
        accumulator.insert(0,hist[0])    

        for i in range(1,histSize):
            accumulator.insert(i,accumulator[i-1]+hist[i])

        maxx=accumulator[histSize-1]
        minGray=0

        clip_percent=clip_percent*(maxx/100.0)
        clip_percent=clip_percent/2.0

        while(accumulator[minGray]<clip_percent[0]):
            minGray=minGray+1

        maxGray=histSize-1
        while(accumulator[maxGray]>=(maxx-clip_percent[0])):
            maxGray=maxGray-1

        inputRange=maxGray-minGray

        alpha=(histSize-1)/inputRange
        beta=-minGray*alpha

        out_img=input_img.copy()

        cv2.convertScaleAbs(input_img,out_img,alpha,beta)

        return out_img
1
Rakshith G B 31 मई 2019, 20:06