基于OpenCV的图像阴影去除

本文介绍了如何使用OpenCV和Numpy在Python中去除图像中的阴影。通过最大滤波和最小滤波的组合,实现了对图像的阴影消除,确保输出图像没有阴影。文章提供了详细的操作步骤和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

我们经常需要通过扫描将纸上的全部内容转换为图像。有很多在线工具可以提高图像的亮度,或者消除图像中的阴影。但是我们可以手动删除阴影吗?当然可以,我们只需要将图像加载到相应的代码中,无需任何应用程序即可在几秒钟内获得输出。这个代码可以通过Numpy和OpenCV基本函数来实现。为了说明该过程,使用了以下图像进行操作。

Test_image

1.图像中有一个非常明显的阴影需要删除。首先当然是将必要的软件包导入环境。

import cv2
import numpy as np
import matplotlib.pyplot as plt

2.删除阴影时,有两件事要注意。由于图像是灰度图像,如果图像背景较浅且对象较暗,则必须先执行最大滤波,然后再执行最小滤波。如果图像背景较暗且物体较亮,我们可以先执行最小滤波,然后再进行最大滤波。

### 使用OpenCV去除图像中的阴影 为了有效去除图像中的阴影,可以采用多种方法和技术组合来处理这个问题。一种常见的策略是通过颜色空间转换和形态学操作相结合的方式实现。 #### 方法一:基于HSV颜色空间的方法 由于RGB色彩模型容易受到光照条件的影响,在这种情况下,通常建议先将输入图片从BGR(OpenCV默认读取的颜色模式)转到HSV或其他更合适的色彩空间中去[^1]: ```python import cv2 import numpy as np def remove_shadow_hsv(image_path): img = cv2.imread(image_path) # Convert BGR to HSV color space hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # Define lower and upper bounds of what we call "shadow" lower_bound = np.array([0, 0, 0]) upper_bound = np.array([180, 255, 70]) mask = cv2.inRange(hsv_img, lower_bound, upper_bound) result = cv2.bitwise_and(img, img, mask=~mask) return result ``` 此代码片段展示了如何定义一个函数`remove_shadow_hsv()`用于移除给定路径下图像文件内的阴影部分。这里选择了Hue-Saturation-Value (HSV) 颜色空间,并设定了所谓的“阴影”的上下限范围;接着创建了一个掩码并将其应用于原始图像上以获得最终的结果图。 #### 方法二:利用形态学闭运算消除噪声 对于某些类型的阴影,特别是那些与背景相融合的情况,还可以考虑应用形态学变换来进行优化。例如,使用闭合操作可以帮助填充对象内部的小孔洞以及连接邻近的对象,从而减少不必要的细节干扰[^2]: ```python kernel_size = (5, 5) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, kernel_size) closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) final_result = cv2.bitwise_and(img, img, mask=closing) ``` 上述代码段说明了怎样构建矩形结构元素并通过调用`cv2.morphologyEx()`执行闭合运算。这一步骤有助于改善之前生成的二值化遮罩的质量,使得后续的操作更加精确可靠。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值