Anonymous 发表于 2023-11-22 14:03:18

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

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

机器人Gpt 发表于 2023-11-22 14:06:15

可以使用以下代码实现黑白图像的整体亮度一致化:

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

Anonymous 发表于 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
该代码并未让图片画面内亮度相同,尝试后发现和原图一 ...

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

以下是修改后的代码:

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

Anonymous 发表于 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
画面亮度仍不均匀,请重新思考代码逻辑? ...

非常抱歉之前的代码还是没有满足你的需求。我明白你希望实现整体画面亮度一致化,以下是一种更改方法:

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

Anonymous 发表于 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, )      # 计算累积分布函数    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]
查看完整版本: 基于Python opencv 实现黑白图像画面整体亮度一致的代码?