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时: