欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV如何去除圖片中的陰影的實現(xiàn)

 更新時間:2021年03月29日 14:07:59   作者:ZackSock  
這篇文章主要介紹了OpenCV如何去除圖片中的陰影的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

如果你自己打印過東西,應(yīng)該有過這種經(jīng)歷。如果用自己拍的圖片,在手機(jī)上看感覺還是清晰可見,但是一打印出來就是漆黑一片。比如下面這兩張圖片:

在這里插入圖片描述

因為左邊的圖片有大片陰影,所有打印出來的圖片不堪入目(因為打印要3毛錢,所以第二張圖片只是我用程序模擬的效果)。

那有什么辦法可以解決嗎?答案是肯定的,今天我們就來探討幾個去除陰影的方法。

二、如何去除陰影?

首先為了方便處理,我們通常會對圖片進(jìn)行灰度轉(zhuǎn)換(即將圖片轉(zhuǎn)換成只有一個圖層的灰色圖像)。

然后我們分析一下,在上面的圖片中有三個主色調(diào),分別是字體顏色(黑色)、紙張顏色(偏白)、陰影顏色(灰色)。知道這點(diǎn)后我們就好辦了。我們只需要把灰色和白色部分都處理為白色就好了。

那要我怎么才知道白色和灰色區(qū)域呢?對于一個8位的灰度圖,黑色部分的像素大致在0-30左右。白色和灰色應(yīng)該在31-255左右(這個范圍只是大致估計,實際情況需要看圖片)。如圖:

在這里插入圖片描述

左邊是原圖,右邊是處理后的圖片。我們將灰色和接近白色的部分都處理成了白色。

那下面我們就開始處理吧。

三、numpy的ndarray數(shù)組

可能有些讀者沒有接觸過numpy,這里簡單說一下。

numpy是一個第三方的模塊,用它我們可以很方便的處理多維數(shù)組(ndarray數(shù)組)。而圖片在OpenCV中的存儲方式正好是ndarray,所以我們對數(shù)組的操作就是對圖片的操作。

在使用之前我們需要安裝一下OpenCV模塊:

pip install opencv-python

在安裝OpenCV時會自動安裝numpy。

下面我們主要是看看布爾索引的操作,先看下面代碼:

import numpy as np
# 創(chuàng)建一個元素為1, 0, 1, 1的ndarray數(shù)組
arr = np.array([1, 0, 1, 1])
# 判斷數(shù)組中有沒有0
res = arr == 0
# 將數(shù)組中為0的元素賦值為10
arr[res] = 10

如果沒有接觸過numpy會不太理解上面的語法。我們來詳細(xì)說一下:

創(chuàng)建ndarray數(shù)組:我們通過np.array可以將現(xiàn)有的列表裝換成一個ndarray對象,這個很好理解

判斷數(shù)組中有沒有0:我們可以直接用ndarray對象來判斷,比如:arr == 0,他會返回一個元素結(jié)構(gòu)和數(shù)量一樣的ndarray對象。但是返回的對象原始類型式bool,我們來看看res的輸出:

[False True False False]

從結(jié)果可以看出,我們比較arr==0就是對數(shù)組中每個元素進(jìn)行比較,并返回比較的布爾值。

將數(shù)組中為0的元素賦值為10:而最難理解的arr[res]操作。它其實就是拿到res中為True的視圖,比如上面的結(jié)果是第二個為True則只會返回第二個元素的視圖。我們執(zhí)行下面的代碼:

arr[res] = 10

就是把對應(yīng)res為True的部分賦值為10,也就是將arr中值為0的部分賦值為10。

下面是arr最后的結(jié)果:

[ 1 10 1 1]

可以看到原本的0處理為了1。

四、去除陰影

現(xiàn)在我們知道了布爾索引,我們可以對圖片進(jìn)行處理了。我們只需要讀取圖片,然后將像素值大于30的部分處理為白色就好了。下面是我們的代碼:

import cv2
# 讀取圖片
img = cv2.imread('page.jpg', 0)
# 將像素值大于30的部分修改為255(白色)
img[img > 30] = 255
# 保存修改后的圖片
cv2.imwrite('res.jpg', img)

上面的代碼非常簡單,我們使用cv2.imread函數(shù)讀取圖片,第一個參數(shù)是圖片路徑,第二個參數(shù)表示讀取為灰度圖。我們來看看效果圖:

在這里插入圖片描述

可以看到陰影部分被很好地去除了。有些字比較模糊,我們可以通過調(diào)節(jié)灰白色地范圍調(diào)整。比如:

img[img > 40] = 255

具體的值就要根據(jù)要處理的圖片來決定了。

五、改進(jìn)

對于上面地處理,還可以做一個小小地改進(jìn)。我們可以讓紙張顏色不那么白,我們來看改進(jìn)后的代碼:

import cv2
import numpy as np
img = cv2.imread('page.jpg', 0)
# 計算灰白色部分像素的均值
pixel = int(np.mean(img[img > 140]))
# 把灰白色部分修改為與背景接近的顏色
img[img > 30] = pixel
cv2.imwrite('res.jpg', img)

在上面的代碼中我們不再是將灰白色部分設(shè)置為255,而是事先計算了一個數(shù)值。

pixel = int(np.mean(img[img > 140]))

猜測陰影部分的顏色值小于140,因此先索引出圖像中大于140的部分。然后求平均值,這樣我們算出來的大致就是原圖的背景顏色,然后將圖片不是文字的部分處理為背景顏色,就是最終結(jié)果了。下面是我們的效果圖:

在這里插入圖片描述

可以看到這次效果要更好了。但是因為背景都是一個顏色,所以看起來還是會有一些差別。

不過有一點(diǎn)需要說一下,上面的操作只適用于比較簡單的圖片,比如試卷這種。

到此這篇關(guān)于OpenCV如何去除圖片中的陰影的實現(xiàn)的文章就介紹到這了,更多相關(guān)OpenCV 去除圖片陰影內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • 如何獲取DataFrame值的索引以及其他

    如何獲取DataFrame值的索引以及其他

    這篇文章主要介紹了如何獲取DataFrame值的索引以及其他問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python中使用zip函數(shù)的七重境界解析

    Python中使用zip函數(shù)的七重境界解析

    這篇文章主要介紹了Python中使用zip函數(shù)的七重境界,重點(diǎn)介紹了Python中功能強(qiáng)大的zip 函數(shù)的多種用法,并給出了相應(yīng)的代碼示例,需要的朋友可以參考下
    2022-12-12
  • Python爬蟲爬取Bilibili彈幕過程解析

    Python爬蟲爬取Bilibili彈幕過程解析

    這篇文章主要介紹了Python爬蟲爬取Bilibili彈幕過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Python 敏感詞過濾的實現(xiàn)示例

    Python 敏感詞過濾的實現(xiàn)示例

    本文主要介紹了Python 敏感詞過濾的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • PyCharm 設(shè)置SciView工具窗口的方法

    PyCharm 設(shè)置SciView工具窗口的方法

    今天小編就為大家分享一篇PyCharm 設(shè)置SciView工具窗口的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 詳談python中subprocess shell=False與shell=True的區(qū)別

    詳談python中subprocess shell=False與shell=True的區(qū)別

    這篇文章主要介紹了詳談python中subprocess shell=False與shell=True的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Pytorch轉(zhuǎn)onnx、torchscript方式

    Pytorch轉(zhuǎn)onnx、torchscript方式

    這篇文章主要介紹了Pytorch轉(zhuǎn)onnx、torchscript方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 利用Python實現(xiàn)自動工作匯報的腳本分享

    利用Python實現(xiàn)自動工作匯報的腳本分享

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實現(xiàn)一個自動工作匯報的腳本,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-08-08
  • 簡單介紹利用TK在Python下進(jìn)行GUI編程的教程

    簡單介紹利用TK在Python下進(jìn)行GUI編程的教程

    這篇文章主要介紹了簡單介紹利用TK在Python下進(jìn)行GUI編程的教程,本文來自于IBM官方開發(fā)者技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • python 常用的異步框架匯總整理

    python 常用的異步框架匯總整理

    自從python3推出關(guān)于異步編程的新語法之后,關(guān)于異步web框架也是如雨后春筍一般爆發(fā),關(guān)于 異步框架的性能也日漸激烈。今天就整理關(guān)于 python 的異步框架。
    2021-06-06

最新評論