python+opencv——去除图像光照不均匀

使用python版本的opencv去除图像中的光照不均匀

在图像处理中,如果图像中存在光照不均匀,则会影响图像处理的效果,比如在图像文本识别和图像分割中。本博客对于图像均衡化的处理主要参考文章:一种基于亮度均衡的图像阈值分割技术,以有关于C++的实现代码:opencv 一种不均匀光照的补偿方法

使用该方法主要的原因是最近在弄Tesseract的文字识别,需要识别拍摄照片中的字母,但是照片为室外拍摄,具有不同的光照影响,导致识别率很低,因此采用该方法进行处理,最后有效的提升了识别率,实现有光照影响的Tesseract文字识别。

全部代码如下:

import cv2
import numpy as np

def unevenLightCompensate(img, blockSize):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    average = np.mean(gray)

    rows_new = int(np.ceil(gray.shape[0] / blockSize))
    cols_new = int(np.ceil(gray.shape[1] / blockSize))

    blockImage = np.zeros((rows_new, cols_new), dtype=np.float32)
    for r in range(rows_new):
        for c in range(cols_new):
            rowmin = r * blockSize
            rowmax = (r + 1) * blockSize
            if (rowmax > gray.shape[0]):
                rowmax = gray.shape[0]
            colmin = c * blockSize
            colmax = (c + 1) * blockSize
            if (colmax > gray.shape[1]):
                colmax = gray.shape[1]

            imageROI = gray[rowmin:rowmax, colmin:colmax]
            temaver = np.mean(imageROI)
            blockImage[r, c] = temaver

    blockImage = blockImage - average
    blockImage2 = cv2.resize(blockImage, (gray.shape[1], gray.shape[0]), interpolation=cv2.INTER_CUBIC)
    gray2 = gray.astype(np.float32)
    dst = gray2 - blockImage2
    dst = dst.astype(np.uint8)
    dst = cv2.GaussianBlur(dst, (3, 3), 0)
    dst = cv2.cvtColor(dst, cv2.COLOR_GRAY2BGR)

    return dst

if __name__ == '__main__':
    file = 'refined_receipt.jpg'
    blockSize = 16
    img = cv2.imread(file)
    dst = unevenLightCompensate(img, blockSize)

    result = np.concatenate([img, dst], axis=1)

    cv2.imshow('result', result)
    cv2.waitKey(0)

效果如下所示:
result
调节的参数有blockSize的尺寸,以及最后的高斯去噪GaussianBlur和其核的大小,本文取的3.

要使用OpenCV消除图像中的强光,可以使用图像均衡化的方法。图像均衡化是一种常用的图像处理技术,可以增强图像的对比度和亮度,从而减少光照均匀的影响。在OpenCV中,可以使用以下代码来实现图像均衡化的处理: ``` src.at<Vec3f>(i, j)\[0\] = 255 * (float)image.at<Vec3b>(i, j)\[0\] / ((float)image.at<Vec3b>(i, j)\[0\] + (float)image.at<Vec3b>(i, j)\[2\] + (float)image.at<Vec3b>(i, j)\[1\]+0.01); src.at<Vec3f>(i, j)\[1\] = 255 * (float)image.at<Vec3b>(i, j)\[1\] / ((float)image.at<Vec3b>(i, j)\[0\] + (float)image.at<Vec3b>(i, j)\[2\] + (float)image.at<Vec3b>(i, j)\[1\]+0.01); ``` 这段代码将图像中每个像素的RGB值进行均衡化处理,从而消除强光的影响。\[2\]\[3\]其中,`src`是处理后的图像,`image`是原始图像。通过对每个像素的RGB值进行归一化处理,可以使图像的亮度更加均匀,从而消除强光的影响。 #### 引用[.reference_title] - *1* [python+opencv——去除图像光照均匀](https://blog.csdn.net/u011276025/article/details/89790190)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [opencv光照补偿和去除光照](https://blog.csdn.net/qq_40909394/article/details/109089903)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值