基于OpenCV 与 C++ 的图像阴影去除

声明:本文章是根据https://cloud.tencent.com/developer/article/1758016做了修改与调整,原博客是python代码实现,本人将其转为C++ opencv,且修正了原文章中的bug(一个错误),照原文章是做不出他那文章中的效果的。

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

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

下面是本人的代码演示环节:
实际就是对原图进行了黑帽运算,用与显示与其领域相比更暗的部分,也就是黑帽操作能提取出暗洞。

#include "stdafx.h"
#

你可能感兴趣的:(OpenCV,图像处理,阴影去除)