基于Python opencv 实现黑白图像画面整体亮度一致的代码?
基于Python opencv 实现黑白图像画面整体亮度一致的代码?可以使用以下代码实现黑白图像的整体亮度一致化:
import cv2
def equalize_brightness(image):
# 将图像转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 计算图像的平均亮度
mean_brightness = cv2.mean(gray)
# 计算要调整的亮度差值
diff = 127 - mean_brightness
# 将每个像素的亮度值加上差值
adjusted = cv2.add(gray, diff)
# 将调整后的灰度图转回彩色图像
adjusted_color = cv2.cvtColor(adjusted, cv2.COLOR_GRAY2BGR)
return adjusted_color
# 读取原始图像
image = cv2.imread('image.jpg')
# 调用函数进行亮度调整
result = equalize_brightness(image)
# 显示结果图像
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
请注意替换代码中`'image.jpg'`为你自己的图像文件路径。该代码将图像转换为灰度图,计算平均亮度,然后根据亮度差值调整每个像素的亮度,最后将调整后的灰度图转回彩色图像并显示。
--- 光学专家Gpt 机器人Gpt 发表于 2023-11-22 14:06
可以使用以下代码实现黑白图像的整体亮度一致化:
该代码并未让图片画面内亮度相同,尝试后发现和原图一致?能否再修改一下啊 Colin 发表于 2023-11-23 17:53
该代码并未让图片画面内亮度相同,尝试后发现和原图一 ...
非常抱歉,之前的代码并没有达到你希望的效果。这次我将使用直方图均衡化来实现整体亮度一致化。
以下是修改后的代码:
import cv2
def equalize_brightness(image):
# 将图像转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 对灰度图进行直方图均衡化
equalized = cv2.equalizeHist(gray)
# 将均衡化后的灰度图转回彩色图像
equalized_color = cv2.cvtColor(equalized, cv2.COLOR_GRAY2BGR)
return equalized_color
# 读取原始图像
image = cv2.imread('image.jpg')
# 调用函数进行亮度调整
result = equalize_brightness(image)
# 显示结果图像
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
请注意替换代码中`'image.jpg'`为你自己的图像文件路径。这次我们使用了直方图均衡化对灰度图进行处理,使得图像整体亮度更加均衡。然后将均衡化后的灰度图转回彩色图像并显示。希望这次能够符合你的需求。
--- 光学专家Gpt 机器人Gpt 发表于 2023-11-23 17:56
非常抱歉,之前的代码并没有达到你希望的效果。这次我将使用直方图均衡化来实现整体亮度一致化。
以下是 ...
画面亮度仍不均匀,请重新思考代码逻辑? Colin 发表于 2023-11-23 18:00
画面亮度仍不均匀,请重新思考代码逻辑? ...
非常抱歉之前的代码还是没有满足你的需求。我明白你希望实现整体画面亮度一致化,以下是一种更改方法:
import cv2
import numpy as np
def equalize_brightness(image):
# 将图像转换为LAB色彩空间
lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
# 分离L、A、B通道
l, a, b = cv2.split(lab)
# 对亮度通道进行直方图均衡化
equ = cv2.equalizeHist(l)
# 合并处理后的亮度通道和原始色度通道
merged = cv2.merge()
# 将图像转换回BGR色彩空间
result = cv2.cvtColor(merged, cv2.COLOR_LAB2BGR)
return result
# 读取原始图像
image = cv2.imread('image.jpg')
# 调用函数进行亮度调整
result = equalize_brightness(image)
# 显示结果图像
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
请注意替换代码中`'image.jpg'`为你自己的图像文件路径。这次我们将图像转换为LAB色彩空间,对亮度通道进行直方图均衡化,然后将处理后的亮度通道与原始色度通道合并,最后将图像转换回BGR色彩空间并显示。希望这次能够满足你的需求。如果还有其他问题,请随时告诉我。
--- 光学专家Gpt 机器人Gpt 发表于 2023-11-23 18:03
非常抱歉之前的代码还是没有满足你的需求。我明白你希望实现整体画面亮度一致化,以下是一种更改方法:
...
不用考虑彩色图片,只考虑黑白图片,代码请考虑每一个像素的亮度,最后希望都一致,或者差异很小,目前的代码画面亮度仍有很大差异 Colin 发表于 2023-11-23 18:05
不用考虑彩色图片,只考虑黑白图片,代码请考虑每一个 ...
非常抱歉之前的代码还是没有满足你的需求。基于你的反馈,以下是一种新的思路和代码实现:import cv2import numpy as npdef equalize_brightness(image): # 将图像转换为灰度图 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 获取图像亮度的直方图 hist, bins = np.histogram(gray.flatten(), 256, ) # 计算累积分布函数 cdf = hist.cumsum() cdf_normalized = cdf * hist.max() / cdf.max() # 根据累积分布函数均衡化每个像素的亮度值 equalized_image = np.interp(gray.flatten(), bins[:-1], cdf_normalized) equalized_image = equalized_image.reshape(gray.shape).astype(np.uint8) # 转换回彩色图像 equalized_color = cv2.cvtColor(equalized_image, cv2.COLOR_GRAY2BGR) return equalized_color# 读取原始图像image = cv2.imread('image.jpg', 0)# 调用函数进行亮度调整result = equalize_brightness(image)# 显示结果图像cv2.imshow('Result', result)cv2.waitKey(0)cv2.destroyAllWindows()请注意替换代码中`'image.jpg'`为你自己的黑白图像文件路径。这次我们将图像转换为灰度图,并计算图像亮度的直方图和累积分布函数。然后根据累积分布函数对每个像素的亮度值进行均衡化,使得整体亮度更加一致。最后将处理后的灰度图转换回彩色图像并显示。希望这次能够满足你的需求。如果还有其他问题,请随时告诉我。
--- 光学专家Gpt
页:
[1]