怎么在python中利用opencv去除图片阴影

  介绍

这期内容当中小编将会给大家带来有关怎么在python中利用opencv去除图片阴影,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。


然后我们分析一下,在上面的图片中有三个主色调,分别是字体颜色(黑色),纸张颜色(偏白),阴影颜色(灰)色。知道这点后我们就好办了。我们只需要把灰色和白色部分都处理为白色就好了。

那要我怎么才知道白色和灰色区域呢?对于一个8位的灰度图,黑色部分的像素大致在0 30左右。白色和灰色应该在31 - 255左右(这个范围只是大致估计,实际情况需要看图片)。如图:

怎么在python中利用opencv去除图片阴影

左边是原图,右边是处理后的图片。我们将灰色和接近白色的部分都处理成了白色。

那下面我们就开始处理吧。

三,numpy的ndarray数组

可能有些读者没有接触过numpy,这里简单说一下。

numpy是一个第三方的模块,用它我们可以很方便的处理多维数组(ndarray数组)。而图片在opencv中的存储方式正好是ndarray,所以我们对数组的操作就是对图片的操作。

在使用之前我们需要安装一下opencv模块:

pip  install  opencv-python

在安装opencv时会自动安装numpy。

下面我们主要是看看布尔索引的操作,先看下面代码:

import  numpy  as  np   #,创建一个元素为1,0,1,1的ndarray数组   时间=arr  np.array ([1, 0, 1, 1])   #,判断数组中有没有0   时间=res  arr ==0   #,将数组中为0的元素赋值为10   10 arr (res),=,

如果没有接触过numpy会不太理解上面的语法。我们来详细说一下:

1。创建ndarray数组:我们通过np.array可以将现有的列表转换成一个ndarray对象,这个很好理解

2。判断数组中有没有0:我们可以直接用ndarray对象来判断,比如:arr==0,他会返回一个元素结构和数量一样的ndarray对象。但是返回的对象原始类型是保龄球,我们来看看res的输出:

(False  True  False 假)

从结果可以看的出,我们比较arr==0就是对数组中每个元素进行比较,并返回比较的布尔值。

3。将数组中为0的元素赋值为10:而最难理解的arr (res)操作。它其实就是拿到res中为真正的视图,比如上面的结果是第二个为真则只会返回第二个元素的视图。我们执行下面的代码:

arr (res),=,

10就是把对应res为真正的部分赋值为10,也就是将arr中值为0的部分赋值为10 .

下面是加勒比海盗最后的结果:

[10, 1, 1, 1]

可以看到原本的0处理为了10 .

四,去除阴影

现在我们知道了布尔索引,我们可以对图片进行处理了。我们只需要读取图片,然后将像素值大于30的部分处理为白色就好了。下面是我们的代码:

import  cv2   #,读取图片   时间=img  cv2.imread (& # 39; page.jpg& # 39;,, 0)   #,将像素值大于30的部分修改为255(白色)   img [30], img 的在,,=255   #,保存修改后的图片   cv2.imwrite (& # 39; res.jpg& # 39;,, img)

上面的代码非常简单,我们使用cv2.imread函数读取图片,第一个参数是图片路径,第二个参数表示读取为灰度图。我们来看看效果图:

怎么在python中利用opencv去除图片阴影

可以看到阴影部分被很好地去除了。有些字比较模糊,我们可以通过调节灰白色的范围调整。比如:

img [40], img 的在,,=, 255

具体的值就要根据要处理的图片来决定了。

五,改进

对于上面的处理,还可以做一个小小的改进。我们可以让纸张颜色不那么白,我们来看改进后的代码:

import  cv2   import  numpy  as  np   时间=img  cv2.imread (& # 39; page.jpg& # 39;,, 0)   #,计算灰白色部分像素的均值   pixel =, int (np.mean (img [, img 的在,140]))   #,把灰白色部分修改为与背景接近的颜色   img [30], img 的在,,=,像素   cv2.imwrite (& # 39; res.jpg& # 39;,, img)

在上面的代码中我们不再是将灰白色部分设置为255年,而是事先计算了一个数值。

pixel =, int (np.mean (img [, img 的在,140]))

怎么在python中利用opencv去除图片阴影