cv2.waitKey(0)保持显示窗口,直到用户按下任意键

代码:

#灰度反转
import cv2

# opencv读取图像
img = cv2.imread('gray.png', 1)

#检查图像是否成功加载
if img is not None:
    cv2.imshow('img', img)

    # 得到图像的尺寸
    img_shape = img.shape  # 图像大小(518, 921, 3)
    print("Original image shape:",img_shape)

    # 彩色图像转换为灰度图像(3通道变为1通道)
    #将每个像素的RGB值转换为一个单一的灰度值
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    print("Gray image shape:",gray.shape)


    # 最大图像灰度值减去原图像,即可得到反转的图像
    inverted_image = 255 - gray
    cv2.imshow('Inverted Image', inverted_image)
    cv2.waitKey(0)
else:
    print("Failed to load image.")

python图片灰度化加权平均法 python将图片灰度化_面试

以下这个彩色图可以看的更加明显一点。

import cv2

# opencv读取图像
img = cv2.imread('rgb.png', 1)

#检查图像是否成功加载
if img is not None:
    cv2.imshow('img', img)

    # 得到图像的尺寸
    img_shape = img.shape  # 图像大小
    print("Original image shape:",img_shape)
    # 得到宽高
    height = img_shape[0]
    wide = img_shape[1]

    # 彩色图像转换为灰度图像(3通道变为1通道)
    #将每个像素的RGB值转换为一个单一的灰度值
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    print("Gray image shape:",gray.shape)

    cv2.imshow("gray",gray)

    # 最大图像灰度值减去原图像,即可得到反转的图像
    inverted_image = 255 - gray
    cv2.imshow('Inverted Image', inverted_image)
    cv2.waitKey(0)
else:
    print("Failed to load image.")

python图片灰度化加权平均法 python将图片灰度化_学习_02

对数变换

对数变换的通式为:s=c*log(1+r)

思路:

彩色图像->灰度图像->c*log*(1+原始图像)->将数值归一化(限定在0~255)

np.log1p(gray)返回 log(1 + gray) 的值。
np.uint8(transformed_image)将值限定在八位二进制(0~255)之间

代码:

当c=1时:

# 对数变换
import cv2
import numpy as np

# opencv读取图像
img = cv2.imread('gray.png', 1)

# 检查图像是否成功加载
if img is not None:
    # 将图像灰度化灰度化
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 对图像进行对数变换c*log(1+x)
    transformed_image = 1 * np.log1p(gray)
    # 将结果缩放到0~255之间 8表示8位,将值限定在0~255之间
    transformed_image = np.uint8(transformed_image)

    # 显示图像
    cv2.imshow('gray', gray)
    cv2.imshow('Log Transformed Image', transformed_image)
    # 窗口保持
    cv2.waitKey(0)
else:
    print("Failed to load image.")

python图片灰度化加权平均法 python将图片灰度化_学习_03

 当c=10时:

python图片灰度化加权平均法 python将图片灰度化_面试_04

当c=20时:

python图片灰度化加权平均法 python将图片灰度化_面试_05

当c=30时:

python图片灰度化加权平均法 python将图片灰度化_python图片灰度化加权平均法_06

幂律(伽马)变换

幂律变换的形式为:s=c*r^y

思路:

彩色图像->灰度图像->将图像的值缩小到[0,1]->幂律变换->将数值归一化(限定在0~255)

gray=img.astype(np.float32)/255.0 先将图像转换成浮点类型,并将像素值归一到[0,1]范围内
corrected_image=np.power(img,1)img的1次方
corrected_image=(corrected_image*255).astype(np.uint8)和前面一样,先将值重新回到整数范围,之后进行归一化

代码:

当c=255,y=1时:

#伽马变换
import cv2
import numpy as np

# opencv读取图像
img = cv2.imread('gray.png', 1)

# opencv读取图像
img = cv2.imread('gray.png', 1)

# 检查图像是否成功加载
if img is not None:
    # 将图像灰度化灰度化
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    #将图像转换为浮点类型
    gray=img.astype(np.float32)/255.0

    #应用伽马变换
    corrected_image=np.power(img,1)
    #将结果缩放到0~255之间
    corrected_image=(corrected_image*255).astype(np.uint8)

    # 显示图像
    cv2.imshow('Original Image', gray)
    cv2.imshow('Gamma Corrected Image',corrected_image)
    # 窗口保持
    cv2.waitKey(0)
else:
    print("Failed to load image.")

python图片灰度化加权平均法 python将图片灰度化_Python_07

当c=255,y=10时:

python图片灰度化加权平均法 python将图片灰度化_Python_08