gpt4 book ai didi

python - 提高图像亮度不溢出

转载 作者:太空狗 更新时间:2023-10-29 18:15:57 27 4
gpt4 key购买 nike

我在尝试增加图像亮度时遇到问题。

这是原始图像:

enter image description here

我想要得到的图像是这样的:

enter image description here

现在用下面的代码增加亮度:

    image = cv2.imread("/home/wni/vbshare/tmp/a4_index2.png",0)

if sum(image[0])/len(image[0])<200:
new = np.where((255-image)<image,255,image*2)
else:
new = image
return new

然后,我得到了下图:

enter image description here

所以,似乎有些点的亮度溢出了。

我尝试将阈值从 200 更改为其他数字,例如125、100、140 等然而,图像亮度要么保持几乎相同的黑暗,要么溢出。

环境:

python :2.7.10

Opencv: 3.2.0

对此有任何建议。

谢谢。

最佳答案

这是我用一个简单的算法来清理特定图像的镜头。随意使用它并进一步调整它以获得所需的结果。

注意:显示的代码应该适用于 OpenCV 的 2.4.x 和 3.x 分支。

第0步

将输入图像加载为灰度图像。

img = cv2.imread('paper.jpg',0)

第一步

放大图片,去掉文字。此步骤在某种程度上有助于保留条形码。

dilated_img = cv2.dilate(img, np.ones((7,7), np.uint8)) 

Dilated

第二步

中值使用适当大小的内核模糊结果以进一步抑制任何文本。

这应该会为我们提供一个相当不错的背景图像,其中包含所有阴影和/或变色。

bg_img = cv2.medianBlur(dilated_img, 21)

Blurred

第三步

计算我们刚刚得到的原图和背景的差值。相同的位将是黑色的(差异接近于 0),文本将是白色的(差异较大)。

因为我们想要白底黑字,所以我们反转结果。

diff_img = 255 - cv2.absdiff(img, bg_img)

Inverted Difference

第四步

规范化图像,以便我们使用完整的动态范围。

norm_img = diff_img.copy() # Needed for 3.x compatibility
cv2.normalize(diff_img, norm_img, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)

Normalized

第 5 步

在这一点上,我们的纸张仍然有些灰暗。我们可以将其截断,然后重新规范化图像。

_, thr_img = cv2.threshold(norm_img, 230, 0, cv2.THRESH_TRUNC)
cv2.normalize(thr_img, thr_img, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1)

Gray Trimmed

完成...

好吧,至少对我而言 ;) 您可能想要裁剪它,并进行您想要的任何其他后期处理。


注意:在获得差异图像后,可能值得切换到更高的精度(16 位以上的 int 或 float),以最大程度地减少重复归一化中累积的舍入误差。

关于python - 提高图像亮度不溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44047819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com