Ask Your Question

How to make an image more vibrant in colour using OpenCV?

asked 2018-06-08 02:04:56 -0500

Santhosh1 gravatar image

updated 2018-06-11 01:52:43 -0500

I need to enhance few of the images before processing them. I need to enhance their colour.

I found a post online that shows how to determine how colour an image actually is.

Computing image “colorfulness” with OpenCV and Python


def image_colorfulness(image):
    # split the image into its respective RGB components
    (B, G, R) = cv2.split(image.astype("float"))

    # compute rg = R - G
    rg = np.absolute(R - G)

    # compute yb = 0.5 * (R + G) - B
    yb = np.absolute(0.5 * (R + G) - B)

    # compute the mean and standard deviation of both `rg` and `yb`
    (rbMean, rbStd) = (np.mean(rg), np.std(rg))
    (ybMean, ybStd) = (np.mean(yb), np.std(yb))

    # combine the mean and standard deviations
    stdRoot = np.sqrt((rbStd ** 2) + (ybStd ** 2))
    meanRoot = np.sqrt((rbMean ** 2) + (ybMean ** 2))

    # derive the "colorfulness" metric and return it
    return stdRoot + (0.3 * meanRoot)

For my application the threshold value seems to be 24.00 lesser than this I need to enhance the colour for my application to work properly

I used Gimp tool to enhance the colour

image description

Reduce curve for the colour to be more enhanced

image description

How can I enhance colour of an image in a similar manner using OpenCV?

edit retag flag offensive close merge delete

2 answers

Sort by » oldest newest most voted

answered 2018-06-08 05:02:52 -0500

Santhosh1 gravatar image

Found this link how to enhance the red, green and blue color within an image? altering the saturation channel of the HSV colour space

I even need to reduce the brightness so I even had to alter the value channel of the HSV colourspace


hsvImg = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)

#multiple by a factor to change the saturation
hsvImg[...,1] = hsvImg[...,1]*1.4

#multiple by a factor of less than 1 to reduce the brightness 
hsvImg[...,2] = hsvImg[...,2]*0.6

edit flag offensive delete link more

answered 2018-06-08 06:34:58 -0500

gimp is open source,and i get some color from it before

.... //enhance the color

    Mat Img_out(temp.size(), CV_32FC3);  
    temp.convertTo(Img_out, CV_32FC3);  
    Mat Img_in(temp.size(), CV_32FC3);  
    temp.convertTo(Img_in, CV_32FC3);  
    // define the iterator of the input image  
    MatIterator_<Vec3f> inp_begin, inp_end;  
    inp_end =Img_in.end<Vec3f>();  
    // define the iterator of the output image  
    MatIterator_<Vec3f> out_begin, out_end;  
    out_end =Img_out.end<Vec3f>();  
    // increment (-100.0, 100.0)  
    float Increment=50.0/100.0;   //saturation adjust
    float delta=0;  
    float minVal, maxVal;  
    float t1, t2, t3;  
    float L,S;  
    float alpha;  
    for(; inp_begin!=inp_end; inp_begin++, out_begin++)  
        S=std::max(0.5*delta/L, 0.5*delta/(1-L));  
        if (Increment>0)  
            alpha=max(S, 1-Increment);  
    Img_out /=255;

the reuslt is sth like this: image description

may it help you.

edit flag offensive delete link more

Question Tools

1 follower


Asked: 2018-06-08 02:04:56 -0500

Seen: 13,275 times

Last updated: Jun 11 '18