【計算機視覺(四)】輪廓檢測

前情提要

上期結(jié)束前我們經(jīng)過一些形態(tài)學處理得到了一幅這樣的圖(根據(jù)大家用的方法和參數(shù)設置可能會有出入)。

上期結(jié)果

可以看到即使經(jīng)過一些腐蝕膨脹濾波的處理隔崎,圖像依然有不少噪聲坦弟,做計算機視覺就是這樣的秕脓,沒有銀彈关贵,只能不斷的利用已有的信息逐步逼近我們想要的結(jié)果。

本期內(nèi)容

本期介紹一些輪廓檢測的方法恒削,結(jié)合一些騷皮操作就能得到我們想要的車牌區(qū)域。

一帝际、矩形檢測

在OpenCV中檢測矩形是用cv2.boundRect蔓同,接受的參數(shù)是一個由多個點組成的list,返回的是一個tuple蹲诀,共有4個元素斑粱,分別表示矩形的左上角x坐標、左上角y坐標脯爪、寬度则北、高度矿微,像這樣。

(x,y,w,h) = cv2.boundingRect([(10,10),(20,25),(30,30),(60,10),(2,15)])

我準備了一個程序可以測試這個效果尚揣,運行程序以后點擊圖像可以在上面畫點涌矢,按S鍵畫矩形,按Q鍵退出快骗。

# coding: utf-8
import cv2
import numpy as np

# 點集
points = []

# 窗口
window_name = 'DEMO'
window = cv2.namedWindow(window_name)

# 底圖
img = np.zeros((300,300,3), dtype=np.uint8)

# 鼠標回調(diào)
def on_mouse(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        print 'Click at (%d,%d)' % (x,y)
        points.append((x,y))
        cv2.circle(img, (x,y), 3, (255,255,255), -1)

# 程序入口
def main():
    global points, img
    # 設置回調(diào)
    cv2.setMouseCallback(window_name, on_mouse)

    # 畫圖
    while True:
        cv2.imshow(window_name, img)
        k = cv2.waitKey(1)
        if k == ord('q'): # 退出
            print 'EXIT'
            return
        elif k == ord('s'): # 繪制矩形
            (x,y,w,h) = cv2.boundingRect(np.array(points))
            cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
        elif k == ord('c'): # 清空
            img[...] = 0
            points = []


if __name__ == '__main__':
    main()

由于我們得到的是掩碼圖而不是一堆點集娜庇,因此還要用一個函數(shù)檢測出邊界點——cv2.findContours。findContours可以找出各個連通域的內(nèi)外邊界點和結(jié)構化表示方篮,在這里我們只需要外邊界點而且不需要結(jié)構化信息名秀。示例代碼如下:

# coding: utf-8
import cv2
import numpy as np

# 程序入口
def main():
    img = cv2.imread('mask.jpg')
    gray = img[..., 0]

    # 尋找點集
    _, contours, _ = cv2.findContours(gray.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 畫點
    for cnt in contours:
        for point in cnt:
            point = (point[0][0], point[0][1])
            cv2.circle(img, point, 1, (255,0,0), -1)

    # 畫圖
    cv2.imshow('DEMO', img)
    cv2.imwrite('contours.jpg', img)
    cv2.waitKey(0)
    
if __name__ == '__main__':
    main()

檢測到的點用藍色標出,效果如下:


contours.jpg

接下來就可以對每個點集求出外接矩形了:

# 在每個點集上求外接矩形
    for cnt in contours:
        (x,y,w,h) = cv2.boundingRect(cnt)
        cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)

效果如下:


外接矩形

可以看到有很多個不同大小的矩形被檢測出來了藕溅,但我們只想要車牌區(qū)域那一個匕得,寬高比例信息是比較容易想到的用于篩選的信息之一,除此以外我還使用了白色區(qū)域占比的信息巾表,代碼如下:

# 在每個點集上求外接矩形
    for cnt in contours:
        (x,y,w,h) = cv2.boundingRect(cnt)
        # 白色區(qū)域占比
        nonZeroRatio = float(cv2.countNonZero(gray[y:y+h, x:x+w])) / (w*h)
        # 寬高比
        whRatio = float(w) / h
        # 高度大于20汁掠,寬高比大于3,白色區(qū)域占比大于0.7
        if h > 20 and whRatio > 3.0 and nonZeroRatio > 0.7:
            cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)

結(jié)果如下:


掩碼結(jié)果

放到原圖上看看效果:


原圖結(jié)果
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末集币,一起剝皮案震驚了整個濱河市考阱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惠猿,老刑警劉巖羔砾,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異偶妖,居然都是意外死亡姜凄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門趾访,熙熙樓的掌柜王于貴愁眉苦臉地迎上來态秧,“玉大人,你說我怎么就攤上這事扼鞋∩暧悖” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵云头,是天一觀的道長捐友。 經(jīng)常有香客問我,道長溃槐,這世上最難降的妖魔是什么匣砖? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上猴鲫,老公的妹妹穿的比我還像新娘对人。我一直安慰自己,他們只是感情好拂共,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布牺弄。 她就那樣靜靜地躺著,像睡著了一般宜狐。 火紅的嫁衣襯著肌膚如雪势告。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天抚恒,我揣著相機與錄音培慌,去河邊找鬼。 笑死柑爸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的盒音。 我是一名探鬼主播表鳍,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼祥诽!你這毒婦竟也來了譬圣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤雄坪,失蹤者是張志新(化名)和其女友劉穎厘熟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體维哈,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡绳姨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了阔挠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片飘庄。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖购撼,靈堂內(nèi)的尸體忽然破棺而出跪削,到底是詐尸還是另有隱情,我是刑警寧澤迂求,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布碾盐,位于F島的核電站,受9級特大地震影響揩局,放射性物質(zhì)發(fā)生泄漏毫玖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望孕豹。 院中可真熱鬧涩盾,春花似錦、人聲如沸励背。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叶眉。三九已至址儒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衅疙,已是汗流浹背莲趣。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饱溢,地道東北人喧伞。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像绩郎,于是被迫代替她去往敵國和親潘鲫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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