灰度值线性变换

原理

假设输入图像为I,宽为W、高为H,输出图像记为O,图像的线性变换可以利用以下公式定义:

\(O(r,c) = a*I(r,c) + b, 0 \leq r< H, 0 \leq c < W\)
当a=1,b=0时,O为I的一个副本;如果a>1,则输出图像O的对比度比I有所增大;如果a<1,则O的对比度比I有所 减小。 而b值的改变,影响的是输出图像的亮度,当b>0时,亮度增加; 当b<0时,亮度减小。

代码

# !/usr/bin/env python
# -*-encoding: utf-8-*-
# author:LiYanwei
# version:0.1


import cv2
import numpy as np

if __name__ =="__main__":
    image = cv2.imread('img1.jpg', cv2.IMREAD_GRAYSCALE)
    MAX_VALUE = 120
    value = 120

    #调整对比度后,图像的效果显示窗口
    cv2.namedWindow("contrast",cv2.WND_PROP_AUTOSIZE)

    #调整系数,观察图像的变化
    def callback_contrast(_value):
        #通过线性运算,调整图像对比度
        a = float(_value)/40.0
        contrastImage = a*image
        contrastImage[contrastImage > 255] = 255
        contrastImage = np.round(contrastImage)
        contrastImage = contrastImage.astype(np.uint8)
        cv2.imshow("contrast", contrastImage)
        cv2.imwrite("contrast.jpg", contrastImage)

    callback_contrast(value)
    cv2.createTrackbar("value", "contrast", value, MAX_VALUE, callback_contrast)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

猜你喜欢

转载自www.cnblogs.com/Py00/p/8927147.html