灰度变换(python)
corrected_image=(corrected_image*255).astype(np.uint8)和前面一样,先将值重新回到整数范围,之后进行归一化。img.shape 用于获取图像的尺寸信息,如果'img'是彩色图像,则返回三个值的元组(高,宽,通道数).如果'img'是灰度图像,则返回元组的高和宽。cv2.imshow('img', img),第一个参数'img'是显示窗口的名称,第
前期准备
pip install opencv-python
pip install numpy
灰度反转
灰度级在区间[0,L-1]内的反转图像的形式为:s=L-1-r
思路:
彩色图像->灰度图像->最大灰度值(255)-原始图像
在彩色图像中,每个像素由红色(R)、绿色(G)和蓝色(B)三个颜色通道组成。而在灰度图像中,每个像素只有一个单一的值,表示该像素的亮度或灰度级别,范围通常从0到255,其中0表示黑色,255表示白色。
img = cv2.imread('gray.png', 1)以彩色模式加载图像,灰度图也会被认为是彩色图。
cv2.imshow('img', img),第一个参数'img'是显示窗口的名称,第二个参数'img'是要显示的图像数据。
img.shape 用于获取图像的尺寸信息,如果'img'是彩色图像,则返回三个值的元组(高,宽,通道数).如果'img'是灰度图像,则返回元组的高和宽。
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)彩色图转灰度图
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.")
以下这个彩色图可以看的更加明显一点。
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.")

对数变换
对数变换的通式为: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.")
当c=10时:

当c=20时:

当c=30时:

幂律(伽马)变换
幂律变换的形式为: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.")

当c=255,y=10时:

当c=2550,y=1时:

当c=1y=1时:

当c=1,y=2.5时:

当c=1,y=0.4时:

参考链接
python--图像颜色反转_cv2灰度图反色-CSDN博客
https://blog.csdn.net/liuyingying0418/article/details/88537652
代码
#图像变换
import cv2
import numpy as np
'''灰度反转 s=L-1-r'''
def gray_inversion(image):
#最大图像的灰度值减去原图像
inverted_image=255-image
return inverted_image
'''对数变换 s=c*log(1+r)'''
def log_transform(image,c=1):
#对图像进行对数变换
transformed_image=c*np.log1p(image)
#将结果缩放到0~255
transformed_image=np.uint8(transformed_image)
return transformed_image
'''伽马变换 s=c*r^y'''
def gamma_correction(image, gamma=1.0, c=1.0):
# 将图像转换为浮点类型
image = image.astype(np.float32) / 255.0
# 应用伽马变换
corrected_image = c * np.power(image, gamma)
# 将结果缩放到0~255之间
corrected_image = np.uint8(corrected_image)
return corrected_image
# opencv读取图像
img = cv2.imread('rgb.png', 1)
# 检查图像是否成功加载
if img is not None:
# 将图像灰度化灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#灰度反转
inverted_image=gray_inversion(gray)
#对数变换
transformed_image=log_transform(gray,20)
#伽马变换
corrected_image=gamma_correction(gray,10,255)
# 显示图像
cv2.imshow('Original Image', img)
cv2.imshow('Gray',gray)
cv2.imshow('Inverted Image',inverted_image)
cv2.imshow('Log Transformed Image',transformed_image)
cv2.imshow('Gamma Corrected Image',corrected_image)
# 窗口保持
cv2.waitKey(0)
else:
print("Failed to load image.")

假设用彩色图像(gray->img)直接调用函数就会出现:

更多推荐



所有评论(0)