使用python opencv 實現(xiàn)圖像邊緣檢測

3.7 開發(fā)日記

心心念念的產(chǎn)學(xué)研終于在中期答辯之后開始了- -

之前都對于自己的產(chǎn)學(xué)研沒有一個計劃,也沒有一絲頭緒健盒,經(jīng)過中期答辯的準(zhǔn)備終于有了一個大致的方向和要學(xué)習(xí)努力的目標(biāo)耍群,所以打算更改之前只coding不記錄的作風(fēng),對于產(chǎn)學(xué)研遇到的問題和開發(fā)路徑都做一個較為詳述的記錄

那就讓我們愉快的開始吧b( ̄▽ ̄)d

邊緣檢測

我們都知道OCR算法是基于圖像的文字識別算法,和邊緣檢測有和什么關(guān)系分俯? 我們在進(jìn)行文本檢測的時候,并不是上來就直接對于文本進(jìn)行檢測哆料,首先要對圖片進(jìn)行預(yù)處理缸剪,先將無用的或者對檢測有影響的因素降到最小,才可以使我們的檢測效率提高一個檔次

第一步要進(jìn)行的操作就是邊緣檢測了东亦,邊緣檢測杏节,顧名思義就是對于文本對象的邊緣進(jìn)行標(biāo)注

代碼在下方

from transform import four_point_transform
import numpy as np
import argparse
import cv2
import imutils

# ap = argparse.ArgumentParser()
# ap.add_argument('-i','--image',required=True,help="Path to image file")
#
# args = vars(ap.parse_args())

#flag: 獲取了圖像路徑

image = cv2.imread('image/30.png')
ratio = image.shape[0] /500.0
orig = image.copy()
image = imutils.resize(image,height=500)

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #灰度圖像
gray = cv2.GaussianBlur(gray,(5,5),0)          #高斯模糊
edged = cv2.Canny(gray,75,200)                  #邊緣檢測



# flag : Test1 = BLOCK
print("STEP 1 Edge Detection")
cv2.imshow("Image",image)
cv2.imshow("Edge",edged)
cv2.waitKey(0)
cv2.destroyAllWindows()

首先引入必要的包

  1. numpy 是運算的必須包
  2. argparse 是方便python的命令行操作
  3. cv2 是openCV圖像處理庫
  4. imutils 是對于圖像進(jìn)行裁剪和切割的庫

為什么第一行有一個four_point_transform??這個并不是什么庫,而是我們自己實現(xiàn)的一個旋轉(zhuǎn)函數(shù)典阵,通過轉(zhuǎn)遞圖像和邊緣矩形的四個點奋渔,就可以通過透視轉(zhuǎn)換將不是正視投影的文本圖片轉(zhuǎn)化為正視角投影

同樣附上這個函數(shù)得代碼

ps: 可以在同一個文件夾下面創(chuàng)建一個新的transform.py 的文件

import numpy as np
import cv2

def order_points(pts):
    #四個點按照左上、右上壮啊、右下嫉鲸、左下

    #pts 是四個點的列表
    rect = np.zeros((4,2),dtype="float32")

    s = pts.sum(axis=1)
    rect[0] = pts[np.argmin(s)]
    rect[2] = pts[np.argmax(s)]

    diff = np.diff(pts,axis = 1)
    rect[1] = pts[np.argmin(diff)]
    rect[3] = pts[np.argmax(diff)]

    return rect

def four_point_transform(image, pts):  #image 為需要透視變換的圖像  pts為四個點

    rect = order_points(pts)  #四點排序
    (tl, tr, br, bl) = rect   #方便計算

    widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))
    widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))
    maxWidth = max(int(widthA), int(widthB))

    heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))
    heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))
    maxHeight = max(int(heightA), int(heightB))


    dst = np.array([
        [0, 0],
        [maxWidth - 1, 0],
        [maxWidth - 1, maxHeight - 1],
        [0, maxHeight - 1]], dtype = "float32")

    M = cv2.getPerspectiveTransform(rect, dst)
    warped = cv2.warpPerspective(image, M, (maxWidth, maxHeight))

    return warped

具體的函數(shù)實現(xiàn)以及每一行的意義已經(jīng)在四點透視變換網(wǎng)址中說的很詳細(xì)了,要了解細(xì)節(jié)可以查閱

總之這個函數(shù)就是通過讓你將邊緣的四個點傳入他巨,然后對于文本(帶有偏移量的或旋轉(zhuǎn)的文本)進(jìn)行一個截取與透視變換

回到我的第一個代碼塊

首先

ap = argparse.ArgumentParser()
ap.add_argument('-i','--image',required=True,help="Path to image file")

args = vars(ap.parse_args())

這三行注冊-i 命令行參數(shù)充坑,意義為輸入需要進(jìn)行處理的圖片路徑,這在之后的整合會很有用

最關(guān)鍵的就是這三句

gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #灰度圖像
gray = cv2.GaussianBlur(gray,(5,5),0)          #高斯模糊
edged = cv2.Canny(gray,75,200)                  #邊緣檢測
  1. 將圖像轉(zhuǎn)為灰度圖像
  2. 將圖像進(jìn)行高斯模糊
  3. 通過模糊之后的圖像進(jìn)行邊緣檢測

讓我們來看看效果

pyhon   transform.py -i image/1.png
37_1.png
37_2.png

效果還不錯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末染突,一起剝皮案震驚了整個濱河市捻爷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌份企,老刑警劉巖也榄,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異司志,居然都是意外死亡甜紫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門骂远,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囚霸,“玉大人,你說我怎么就攤上這事激才⊥匦停” “怎么了额嘿?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長劣挫。 經(jīng)常有香客問我册养,道長,這世上最難降的妖魔是什么压固? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任球拦,我火速辦了婚禮,結(jié)果婚禮上帐我,老公的妹妹穿的比我還像新娘坎炼。我一直安慰自己,他們只是感情好焚刚,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布点弯。 她就那樣靜靜地躺著扇调,像睡著了一般矿咕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狼钮,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天碳柱,我揣著相機與錄音,去河邊找鬼熬芜。 笑死莲镣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涎拉。 我是一名探鬼主播瑞侮,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鼓拧!你這毒婦竟也來了半火?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤季俩,失蹤者是張志新(化名)和其女友劉穎钮糖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酌住,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡店归,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了酪我。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片消痛。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖都哭,靈堂內(nèi)的尸體忽然破棺而出秩伞,到底是詐尸還是另有隱情谴古,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布稠歉,位于F島的核電站掰担,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏怒炸。R本人自食惡果不足惜带饱,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阅羹。 院中可真熱鬧勺疼,春花似錦、人聲如沸捏鱼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽导梆。三九已至轨淌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間看尼,已是汗流浹背递鹉。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留藏斩,地道東北人躏结。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像狰域,于是被迫代替她去往敵國和親媳拴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 不同圖像灰度不同兆览,邊界處一般會有明顯的邊緣屈溉,利用此特征可以分割圖像。需要說明的是:邊緣和物體間的邊界并不等同拓颓,邊緣...
    大川無敵閱讀 13,836評論 0 29
  • 文章作者:Tyan博客:noahsnail.com | CSDN | 簡書 聲明:作者翻譯論文僅為學(xué)習(xí)语婴,如有侵權(quán)請...
    SnailTyan閱讀 1,904評論 0 2
  • 它們是什么? NumPy是Python語言的一個擴充程序庫驶睦。支持高級大量的維度數(shù)組與矩陣運算砰左,此外也針對數(shù)組運算提...
    liuchungui閱讀 3,221評論 0 23
  • 因為開始考慮選擇外貿(mào)相關(guān)工作缠导,于是發(fā)現(xiàn)一年前的問題又一次出現(xiàn)了,那時候迷茫溉痢,覺得用語退步僻造,包括面試后被建議要重新?lián)?..
    心靈的花園閱讀 266評論 0 0
  • 所有的一切都變了憋他,變得不再是她記憶里熟悉的那樣。人不是從前的人髓削,事也不是正常事竹挡。物是人非嗎?王昭君淚流滿面立膛,可是他...
    徐小燕XUXIAOYAN閱讀 470評論 4 5