基于Python opencv 实现黑白图像画面整体亮度一致的代码?

[复制链接]
匿名  发表于 2023-11-22 14:03:18 |阅读模式
基于Python opencv 实现黑白图像画面整体亮度一致的代码?
回复

使用道具 举报

全部回复7 显示全部楼层
机器人Gpt 发表于 2023-11-22 14:06:15 | 显示全部楼层
可以使用以下代码实现黑白图像的整体亮度一致化:
  1. import cv2
  2. def equalize_brightness(image):
  3.     # 将图像转换为灰度图
  4.     gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  5.    
  6.     # 计算图像的平均亮度
  7.     mean_brightness = cv2.mean(gray)[0]
  8.    
  9.     # 计算要调整的亮度差值
  10.     diff = 127 - mean_brightness
  11.    
  12.     # 将每个像素的亮度值加上差值
  13.     adjusted = cv2.add(gray, diff)
  14.    
  15.     # 将调整后的灰度图转回彩色图像
  16.     adjusted_color = cv2.cvtColor(adjusted, cv2.COLOR_GRAY2BGR)
  17.    
  18.     return adjusted_color
  19. # 读取原始图像
  20. image = cv2.imread('image.jpg')
  21. # 调用函数进行亮度调整
  22. result = equalize_brightness(image)
  23. # 显示结果图像
  24. cv2.imshow('Result', result)
  25. cv2.waitKey(0)
  26. cv2.destroyAllWindows()
复制代码

请注意替换代码中`'image.jpg'`为你自己的图像文件路径。该代码将图像转换为灰度图,计算平均亮度,然后根据亮度差值调整每个像素的亮度,最后将调整后的灰度图转回彩色图像并显示。
--- 光学专家Gpt
回复 支持 反对

使用道具 举报

匿名  发表于 2023-11-23 17:53:50
机器人Gpt 发表于 2023-11-22 14:06
可以使用以下代码实现黑白图像的整体亮度一致化:

该代码并未让图片画面内亮度相同,尝试后发现和原图一致?能否再修改一下啊
回复 支持 反对

使用道具 举报

机器人Gpt 发表于 2023-11-23 17:56:04 | 显示全部楼层
Colin 发表于 2023-11-23 17:53
该代码并未让图片画面内亮度相同,尝试后发现和原图一 ...

非常抱歉,之前的代码并没有达到你希望的效果。这次我将使用直方图均衡化来实现整体亮度一致化。

以下是修改后的代码:
  1. import cv2
  2. def equalize_brightness(image):
  3.     # 将图像转换为灰度图
  4.     gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  5.     # 对灰度图进行直方图均衡化
  6.     equalized = cv2.equalizeHist(gray)
  7.     # 将均衡化后的灰度图转回彩色图像
  8.     equalized_color = cv2.cvtColor(equalized, cv2.COLOR_GRAY2BGR)
  9.     return equalized_color
  10. # 读取原始图像
  11. image = cv2.imread('image.jpg')
  12. # 调用函数进行亮度调整
  13. result = equalize_brightness(image)
  14. # 显示结果图像
  15. cv2.imshow('Result', result)
  16. cv2.waitKey(0)
  17. cv2.destroyAllWindows()
复制代码

请注意替换代码中`'image.jpg'`为你自己的图像文件路径。这次我们使用了直方图均衡化对灰度图进行处理,使得图像整体亮度更加均衡。然后将均衡化后的灰度图转回彩色图像并显示。希望这次能够符合你的需求。
--- 光学专家Gpt
回复 支持 反对

使用道具 举报

匿名  发表于 2023-11-23 18:00:50
机器人Gpt 发表于 2023-11-23 17:56
非常抱歉,之前的代码并没有达到你希望的效果。这次我将使用直方图均衡化来实现整体亮度一致化。

以下是 ...

画面亮度仍不均匀,请重新思考代码逻辑?
回复 支持 反对

使用道具 举报

机器人Gpt 发表于 2023-11-23 18:03:15 | 显示全部楼层
Colin 发表于 2023-11-23 18:00
画面亮度仍不均匀,请重新思考代码逻辑? ...

非常抱歉之前的代码还是没有满足你的需求。我明白你希望实现整体画面亮度一致化,以下是一种更改方法:
  1. import cv2
  2. import numpy as np
  3. def equalize_brightness(image):
  4.     # 将图像转换为LAB色彩空间
  5.     lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
  6.    
  7.     # 分离L、A、B通道
  8.     l, a, b = cv2.split(lab)
  9.    
  10.     # 对亮度通道进行直方图均衡化
  11.     equ = cv2.equalizeHist(l)
  12.    
  13.     # 合并处理后的亮度通道和原始色度通道
  14.     merged = cv2.merge([equ, a, b])
  15.    
  16.     # 将图像转换回BGR色彩空间
  17.     result = cv2.cvtColor(merged, cv2.COLOR_LAB2BGR)
  18.    
  19.     return result
  20. # 读取原始图像
  21. image = cv2.imread('image.jpg')
  22. # 调用函数进行亮度调整
  23. result = equalize_brightness(image)
  24. # 显示结果图像
  25. cv2.imshow('Result', result)
  26. cv2.waitKey(0)
  27. cv2.destroyAllWindows()
复制代码

请注意替换代码中`'image.jpg'`为你自己的图像文件路径。这次我们将图像转换为LAB色彩空间,对亮度通道进行直方图均衡化,然后将处理后的亮度通道与原始色度通道合并,最后将图像转换回BGR色彩空间并显示。希望这次能够满足你的需求。如果还有其他问题,请随时告诉我。
--- 光学专家Gpt
回复 支持 反对

使用道具 举报

匿名  发表于 2023-11-23 18:05:52
机器人Gpt 发表于 2023-11-23 18:03
非常抱歉之前的代码还是没有满足你的需求。我明白你希望实现整体画面亮度一致化,以下是一种更改方法:

...

不用考虑彩色图片,只考虑黑白图片,代码请考虑每一个像素的亮度,最后希望都一致,或者差异很小,目前的代码画面亮度仍有很大差异
回复 支持 反对

使用道具 举报

机器人Gpt 发表于 2023-11-23 18:08:08 | 显示全部楼层
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, [0,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
回复 支持 反对

使用道具 举报

快速回帖

您需要登录后才可以回帖 登录 | 立即注册 手机动态码快速登录

本版积分规则

关于楼主

匿名用户组
  • 主题

    23
  • 回答

    3
  • 积分

    24
联系客服 关注微信 访问手机版 返回顶部 返回列表