对图像的灰度图进行对比度增强或减弱操作,前半部分对k值进行操作,后半部分对k值和b值都进行操作。

代码如下:

import cv2 as cv
import numpy as np
# 图像灰度对比度操作
img = cv.imread("./image/fengjing.jpg")
# 在做线性变换之前,需要将彩色图像变为灰度图像。通常用cvtColor()来进行颜色空间的转换
# 将图像转换成灰度图
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
print(img_gray.shape)
height, width = img_gray.shape[:2]
print(height, width)
# 创建新图像,以便于后续操作
img_a = np.zeros((height, width), np.uint8)
img_b = np.zeros((height, width), np.uint8)
# 对比度增强,k=1.6
for i in range(height):
    for j in range(width):
        result = int(img_gray[i, j] * 1.6)
        if result > 255:
            result = 1
        else:
            result = result
            # 这不能写continue,否则会接不到result
        img_a[i, j] = np.uint8(result)
# 对比度减弱,k=0.3
for i in range(height):
    for j in range(width):
        result = int(img_gray[i, j] * 0.3)
        if result < 0:
            result = 0
        else:
            result = result
            # 这不能写continue,否则会接不到result
        img_b[i, j] = np.uint8(result)
cv.imshow("img", img)
cv.imshow("result_a", img_a)
cv.imshow("result_b", img_b)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述只是对k值进行操作,下面对k值和b值都进行操作。

代码如下:

import cv2 as cv
import numpy as np
# 图像灰度对比度操作
img = cv.imread("./image/fengjing.jpg")
# 在做线性变换之前,需要将彩色图像变为灰度图像。通常用cvtColor()来进行颜色空间的转换
# 将图像转换成灰度图
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
print(img_gray.shape)
height, width = img_gray.shape[:2]
print(height, width)
# 创建新图像,以便于后续操作
img_a = np.zeros((height, width), np.uint8)
img_b = np.zeros((height, width), np.uint8)
# 对比度增强,k=1.6,亮度增强,b=90,其中,b也可为0
for i in range(height):
    for j in range(width):
        result = int(img_gray[i, j] * 1.6 + 90)
        if result > 255:
            result = 1
        else:
            result = result
            # 这不能写continue,否则会接不到result
        img_a[i, j] = np.uint8(result)
# 对比度减弱,k=0.3,亮度增强,b=90,其中,b也可为0
for i in range(height):
    for j in range(width):
        result = int(img_gray[i, j] * 0.3 + 90)
        if result < 0:
            result = 0
        else:
            result = result
            # 这不能写continue,否则会接不到result
        img_b[i, j] = np.uint8(result)
cv.imshow("img", img)
cv.imshow("result_a", img_a)
cv.imshow("result_b", img_b)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
与上半部分对比,发现通过b值的加入,亮度明显增强。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐