日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

发现你的身形——OpenCV图像轮廓

發(fā)布時(shí)間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 发现你的身形——OpenCV图像轮廓 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 寫在最前
    • 輪廓發(fā)現(xiàn)算法
    • 邊緣檢測(cè)
    • 寫在最后

寫在最前

我的意思不是說(shuō)你長(zhǎng)得很胖,emmmm,而是你的輪廓很大。
——五星上將詹姆斯下士如是說(shuō)


果然有圖沒(méi)圖,理解是不一樣的,這就體現(xiàn)了計(jì)算機(jī)視覺(jué)的重要性,2333
上一節(jié)最后,我們說(shuō)過(guò)這一次我們就將會(huì)講解真正的OpenCV圖像輪廓有關(guān)知識(shí)。輪廓發(fā)現(xiàn)的具體實(shí)現(xiàn)有多種方式,不過(guò)其實(shí)其使用在OpenCV中的使用并不困難,不過(guò)想用好還需要多點(diǎn)基礎(chǔ)知識(shí)。所以這里我們會(huì)首先講一講OpenCV中的輪廓發(fā)現(xiàn)算法,然后再講一講其他可以用于輪廓發(fā)現(xiàn)的特殊方法。這里我們主要使用了兩種來(lái)自于opencv官方的圖片(Note:上面那張不是),第一張是彩色快樂(lè)魚,第二張是水果分尸圖不對(duì),應(yīng)該是果繽紛才對(duì)。\(^o^)/~

輪廓發(fā)現(xiàn)算法

opencv中的輪廓發(fā)現(xiàn)算法來(lái)自于1985的一篇論文《TopologicalStructural Analysis of Digitized Binary Images by Border Following》,這篇論文主要講了兩種可有效利用于輪廓發(fā)現(xiàn)的邊界跟蹤算法,其中第一種是區(qū)分二值圖像邊界之間的保衛(wèi)關(guān)系(surroundness relations)第二種是第一種算法的變形,只跟蹤最外層輪廓。對(duì)于具體內(nèi)容這里不再過(guò)多描述,你可以自行查閱。至于具體的使用,我們直接使用OpenCV中的函數(shù)findContours即可。

由于opencv中的輪廓發(fā)現(xiàn)借鑒于論文《 Analysis of Digitized Binary Images by Border Following》,所以其只能接受二值化之后的圖像,也就是說(shuō)我們需要先對(duì)原始圖像進(jìn)行二值化處理,這里需要使用函數(shù)cvtColor將圖片進(jìn)行類型轉(zhuǎn)化,具體代碼如下:

# 灰度圖像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化 ret, binary = cv2.threshold(gray, 175, 255, cv2.THRESH_BINARY)

其中COLOR_BGR2GRAY的作用一如其名,就是將BGR圖像轉(zhuǎn)化為GRAY(灰度圖,又名遺照)

之后我們就可以使用 cv2.threshold方法進(jìn)行二值化處理,就這樣一條彩色的快樂(lè)魚就變成了一張黑白的快樂(lè)魚遺照了。其中要注意的是,閾值是由我們自己選定的(這里是175),我們也可以通過(guò)修改閾值來(lái)獲取新的二值化參數(shù)。

最終,我們就可以將二值化之后的圖像傳進(jìn)輪廓發(fā)現(xiàn)算法,進(jìn)行輪廓發(fā)現(xiàn)并繪制。代碼與結(jié)果如下:

# 輪廓發(fā)現(xiàn) contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 輪廓繪制 cv2.drawContours(img, contours_new, -1, (0, 0, 255), 3)

現(xiàn)在快樂(lè)魚就被慘遭“分尸”了,嘴巴上多了一條大口子。而說(shuō)回正事,上面的代碼中drawContours函數(shù)就是繪制函數(shù),第一個(gè)參數(shù)是需要繪制的原圖像,第二個(gè)參數(shù)是之前我們使用算法發(fā)現(xiàn)的輪廓,第三個(gè)參數(shù)則表示繪制的輪廓索引,這里使用-1表示繪制所有輪廓,第四個(gè)參數(shù)則是繪制輪廓時(shí)線條的顏色,這里我們選擇紅色0。第五個(gè)參數(shù)則表示線條粗細(xì)度,如果是負(fù)值則在輪廓內(nèi)部繪制。除此之外還有一個(gè)隱身的六娃lineType表示線條類型,因?yàn)橛心J(rèn)數(shù)值LINE_8,所以這里沒(méi)有設(shè)置。

不過(guò)除了這些基本的操作外,我們還可以有很多其他的操作,比如借助之前我們學(xué)過(guò)的濾波函數(shù)對(duì)圖像進(jìn)行處理,去除那些意義不大的小色塊,或者使用邊緣檢測(cè)算法如Canny先一步獲取圖形邊緣(代替直接二值化哪一步),然后再進(jìn)行輪廓發(fā)現(xiàn),這些操作避免發(fā)現(xiàn)錯(cuò)誤輪廓,同時(shí)我們也可以使用判斷方法選擇一定周長(zhǎng)或者面積的輪廓。前者直接使用cv.blur(src_gray, (3,3)),以及函數(shù)canny_output = cv.Canny(gray, threshold, threshold * 2)即可,后者則需要幾個(gè)opencv的函數(shù)進(jìn)行配合,具體代碼如下:

# Detect edges using Canny threshold = 100 # Detect edges using Canny canny_output = cv2.Canny(gray, threshold, threshold * 2) for i in range(len(contours)):# 計(jì)算輪廓所包含的面積area = cv2.contourArea(contours[i])# 計(jì)算輪廓的周長(zhǎng)perimeter = cv2.arcLength(contours[i], True)if perimeter >= 10 and area >= 20:print("第{0}個(gè)輪廓的面積為{1},周長(zhǎng)為{2}".format(i+1,area,perimeter))contours_new.append(contours[i])

第一段代碼的作用是使用Canny進(jìn)行邊緣檢測(cè)(展示的圖片也經(jīng)過(guò)了均值模糊),然后得到一張只有邊緣數(shù)據(jù)的圖,這樣就避免了之前直接二值化產(chǎn)生的像素閾值產(chǎn)生的本來(lái)不存在的誤差,而第二行代碼則是利用計(jì)算輪廓面積和計(jì)算輪廓周長(zhǎng)的函數(shù)進(jìn)行輪廓篩選。其實(shí)這里我們也可以選擇不進(jìn)行篩選直接進(jìn)行獲取,但是在一般情況下

均值模糊,邊緣檢測(cè),周長(zhǎng),面積等都是十分有用的操作,至于怎么用則需要根據(jù)實(shí)際情況進(jìn)行調(diào)整。

邊緣檢測(cè)

這里還提到了邊緣檢測(cè),邊緣檢測(cè)顧名思義就是檢測(cè)圖片的邊緣。在一些特殊情況下其實(shí)邊緣檢測(cè)比直接輪廓獲取有用,不過(guò)也有些時(shí)候圖像分割的一些技術(shù)更有用一些。這幾項(xiàng)技術(shù)的特點(diǎn)都是作用于圖像中的區(qū)域?qū)ζ溥M(jìn)行處理。只不過(guò)在沒(méi)有深度學(xué)習(xí)的時(shí)代,沒(méi)有像目標(biāo)檢測(cè),或者現(xiàn)代的更直接的自動(dòng)進(jìn)行圖像分割的技術(shù),只能使用各類算法進(jìn)行手動(dòng)操作,從不同的圖片中手動(dòng)設(shè)置不同的方法獲取我們想要的信息。

Canny就是一種比較常見的邊緣檢測(cè)方法,下面就是一個(gè)例子。我們將會(huì)在下一屆仔細(xì)的講講的邊緣檢測(cè)等有關(guān)圖像處理技術(shù)。


寫在最后

大概寫到這個(gè)時(shí)候感覺(jué)確實(shí)可以出個(gè)專欄了,所以正式規(guī)劃了《漫談?dòng)?jì)算機(jī)視覺(jué)》,頻率大概會(huì)一周一更,大概會(huì)從OpenCV將其,然后一直串到這兩年各個(gè)計(jì)算機(jī)視覺(jué)領(lǐng)域比較經(jīng)典深度神經(jīng)網(wǎng)絡(luò)。同時(shí)代碼會(huì)開源,之后代碼和有關(guān)數(shù)據(jù)前往FontTian的Github下載即可,包括之前的內(nèi)容都會(huì)穿上去,項(xiàng)目位置在這:https://github.com/FontTian/Gossipage_About_CV。

總結(jié)

以上是生活随笔為你收集整理的发现你的身形——OpenCV图像轮廓的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日一区二区三区 | 亚洲第一国产视频 | 人妻互换一区二区激情偷拍 | 亚洲最大激情网 | 美女狠狠干 | 99re这里都是精品 | 女同一区二区三区 | 成人在线免费网站 | 久久精品免费在线 | 久久青草视频 | xxxxⅹxxxhd日本8hd | 亚洲av乱码久久精品蜜桃 | 色999在线观看 | 欧洲成人av | 91在线日韩 | 亚洲欧美日韩成人 | 欧美顶级少妇做爰hd | 黄色日批 | 青青草超碰在线 | 白浆网站| 欧美一级片免费在线观看 | 美女又爽又黄视频毛茸茸 | 四虎新网站 | 好看的中文字幕av | 男人日女人b视频 | 国产片一区二区 | 日韩黄色片免费看 | 熟女少妇在线视频播放 | 一本色道久久综合熟妇 | 免费观看的毛片 | 一级大片在线观看 | 日韩精品在线观看AV | 182tv午夜福利在线观看 | 国产精品亚洲一区二区三区 | 日本不卡影院 | 日噜| 中文有码视频 | 亚洲激情一区二区三区 | 一区二区三区91 | 国产99re | 欧美性大战久久久 | 一级特黄a大片免费 | 欧美成人专区 | 国产日韩精品一区 | 动漫美女视频 | 国产黄色片在线 | jizz国产视频 | 日韩综合在线 | 久久久久久9999 | 色婷五月天| 自拍偷拍 亚洲 | 污视频网站免费在线观看 | 肮脏的交易在线观看 | 狠狠91 | 国产精品天天干 | 精品久久BBBBB精品人妻 | 制服丝袜第一页在线观看 | 亚洲欧美日韩精品久久亚洲区 | 无码成人精品区在线观看 | 69毛片 | 国内自拍xxxx18| 久久婷色| 成人91av| 日本理论片午伦夜理片在线观看 | 欧美暧暧视频 | 纯爱无遮挡h肉动漫在线播放 | 色久综合 | 四川少妇xxx奶大xxx | 日本a级网站 | 91视频免费观看网站 | 国产视频999 | 中文字幕在线成人 | 国产精品亚洲一区 | 久久久久国产精品夜夜夜夜夜 | 欧美视频第一区 | 亚洲性免费 | 亚洲精品视频在线看 | 碧蓝之海动漫在线观看免费高清 | 亚洲伦理自拍 | 牛牛精品视频 | 五月婷婷视频 | 自拍愉拍 | 亚洲人成电影网 | 性一交一乱一色一免费无遮挡 | 色乱码一区二区三区在线男奴 | 美日韩一区二区三区 | 精品欧美乱码久久久久久 | 欧美成人黑人猛交 | 人妻一区二区三区免费 | 免费视频亚洲 | 人人舔人人干 | 国产高清视频在线观看 | 成人免费观看视频大全 | 日韩福利小视频 | 日韩激情视频一区二区 | 少妇激情偷人爽爽91嫩草 | 激情av中文字幕 | 精品国产露脸精彩对白 | 99热综合 |