最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 基于opencv去除圖片陰影

 更新時(shí)間:2021年01月26日 16:14:38   作者:ZackSock  
這篇文章主要介紹了python 基于opencv去除圖片陰影的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

一、前言

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

因?yàn)樽筮叺膱D片有大片陰影,所以打印出來(lái)的圖片不堪入目(因?yàn)榇蛴∫?毛錢(qián),所以第二張圖片只是我用程序模擬的效果)。

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

二、如何去除陰影?

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

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

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

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

那下面我們就開(kāi)始處理吧。

三、numpy的ndarray數(shù)組

可能有些讀者沒(méi)有接觸過(guò)numpy,這里簡(jiǎn)單說(shuō)一下。

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

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

pip install opencv-python

在安裝OpenCV時(shí)會(huì)自動(dòng)安裝numpy。

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

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

如果沒(méi)有接觸過(guò)numpy會(huì)不太理解上面的語(yǔ)法。我們來(lái)詳細(xì)說(shuō)一下:

1.創(chuàng)建ndarray數(shù)組:我們通過(guò)np.array可以將現(xiàn)有的列表轉(zhuǎn)換成一個(gè)ndarray對(duì)象,這個(gè)很好理解

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

[False True False False]

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

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

arr[res] = 10

就是把對(duì)應(yīng)res為T(mén)rue的部分賦值為10,也就是將arr中值為0的部分賦值為10。

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

[ 1 10 1 1]

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

四、去除陰影

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

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

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

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

img[img > 40] = 255

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

五、改進(jìn)

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

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

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

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

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

可以看到這次效果要更好了。但是因?yàn)楸尘岸际且粋€(gè)顏色,所以看起來(lái)還是會(huì)有一些差別。

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

以上就是python 基于opencv去除圖片陰影的詳細(xì)內(nèi)容,更多關(guān)于python 去除圖片陰影的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用python tkinter實(shí)現(xiàn)各種個(gè)樣的撩妹鼠標(biāo)拖尾效果

    使用python tkinter實(shí)現(xiàn)各種個(gè)樣的撩妹鼠標(biāo)拖尾效果

    這篇文章主要介紹了使用python tkinter實(shí)現(xiàn)各種個(gè)樣的撩妹鼠標(biāo)拖尾效果,本文通過(guò)實(shí)例代碼,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • tensorflow saver 保存和恢復(fù)指定 tensor的實(shí)例講解

    tensorflow saver 保存和恢復(fù)指定 tensor的實(shí)例講解

    今天小編就為大家分享一篇tensorflow saver 保存和恢復(fù)指定 tensor的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python3調(diào)用百度AI識(shí)別圖片中的文字功能示例【測(cè)試可用】

    Python3調(diào)用百度AI識(shí)別圖片中的文字功能示例【測(cè)試可用】

    這篇文章主要介紹了Python3調(diào)用百度AI識(shí)別圖片中的文字功能,結(jié)合實(shí)例形式分析了Python3安裝及使用百度AI接口的相關(guān)操作技巧,并附帶說(shuō)明了百度官方AI平臺(tái)的注冊(cè)及接口調(diào)用操作方法,需要的朋友可以參考下
    2019-03-03
  • 詳解10個(gè)可以快速用Python進(jìn)行數(shù)據(jù)分析的小技巧

    詳解10個(gè)可以快速用Python進(jìn)行數(shù)據(jù)分析的小技巧

    這篇文章主要介紹了詳解10個(gè)可以快速用Python進(jìn)行數(shù)據(jù)分析的小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python源碼加密與Pytorch模型加密分別介紹

    Python源碼加密與Pytorch模型加密分別介紹

    在實(shí)際的工作中,有時(shí)候我們需要部署自己的Python應(yīng)用,但這時(shí)候我們并不希望別人能夠看到自己的Python源程序。因此,我們需要為自己的源代碼進(jìn)行加密,Python已經(jīng)為我們提供了這樣一套工作機(jī)制
    2022-12-12
  • django從請(qǐng)求到響應(yīng)的過(guò)程深入講解

    django從請(qǐng)求到響應(yīng)的過(guò)程深入講解

    這篇文章主要給大家介紹了關(guān)于django從請(qǐng)求到響應(yīng)的過(guò)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • Python 解決相對(duì)路徑問(wèn)題:

    Python 解決相對(duì)路徑問(wèn)題:"No such file or directory"

    這篇文章主要介紹了Python 解決相對(duì)路徑問(wèn)題:"No such file or directory"具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python驗(yàn)證碼識(shí)別的方法

    Python驗(yàn)證碼識(shí)別的方法

    這篇文章主要介紹了Python驗(yàn)證碼識(shí)別的方法,涉及Python針對(duì)驗(yàn)證碼圖片的相關(guān)分析與操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • selenium自動(dòng)化測(cè)試入門(mén)實(shí)戰(zhàn)

    selenium自動(dòng)化測(cè)試入門(mén)實(shí)戰(zhàn)

    這篇文章主要介紹了selenium自動(dòng)化測(cè)試入門(mén)實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python?numpy庫(kù)之如何使用matpotlib庫(kù)繪圖

    python?numpy庫(kù)之如何使用matpotlib庫(kù)繪圖

    Numpy的主要對(duì)象是同構(gòu)多維數(shù)組,它是一個(gè)元素表,所有類(lèi)型都相同,由非負(fù)整數(shù)元組索引,在Numpy維度中稱(chēng)為軸,這篇文章主要介紹了python?numpy庫(kù)?使用matpotlib庫(kù)繪圖,需要的朋友可以參考下
    2022-10-10

最新評(píng)論

郸城县| 微博| 芷江| 呼图壁县| 错那县| 确山县| 彭山县| 米泉市| 汉源县| 香格里拉县| 乳山市| 南宫市| 峨眉山市| 德州市| 广昌县| 白山市| 遵义市| 枣阳市| 清水县| 长沙市| 玉门市| 吉木乃县| 肥东县| 延吉市| 三台县| 成安县| 临海市| 吴旗县| 靖宇县| 泉州市| 双鸭山市| 楚雄市| 温泉县| 三明市| 长岛县| 商城县| 沅陵县| 固镇县| 东丰县| 同德县| 项城市|