日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python使用Opencv實(shí)現(xiàn)邊緣檢測(cè)以及輪廓檢測(cè)的實(shí)現(xiàn)

瀏覽:41日期:2022-06-30 17:09:09
邊緣檢測(cè)

Canny邊緣檢測(cè)器是一種被廣泛使用的算法,并被認(rèn)為是邊緣檢測(cè)最優(yōu)的算法,該方法使用了比高斯差分算法更復(fù)雜的技巧,如多向灰度梯度和滯后閾值化。

Canny邊緣檢測(cè)器算法基本步驟:

平滑圖像:通過(guò)使用合適的模糊半徑執(zhí)行高斯模糊來(lái)減少圖像內(nèi)的噪聲。 計(jì)算圖像的梯度:這里計(jì)算圖像的梯度,并將梯度分類為垂直、水平和斜對(duì)角。這一步的輸出用于在下一步中計(jì)算真正的邊緣。 非最大值抑制:利用上一步計(jì)算出來(lái)的梯度方向,檢測(cè)某一像素在梯度的正方向和負(fù)方向上是否是局部最大值,如果是,則抑制該像素(像素不屬于邊緣)。這是一種邊緣細(xì)化技術(shù),用最急劇的變換選出邊緣點(diǎn)。 用滯后閾值化選擇邊緣:最后一步,檢查某一條邊緣是否明顯到足以作為最終輸出,最后去除所有不明顯的邊緣。

Opencv使用Canny邊緣檢測(cè)相對(duì)簡(jiǎn)單,代碼如下:

import cv2import numpy as npimg = cv2.imread('hammer.jpg', 0)cv2.imwrite('canny.jpg', cv2.Canny(img, 200, 300))cv2.imshow('canny', cv2.imread('canny.jpg'))cv2.waitKey()cv2.destroyAllWindows()

運(yùn)行結(jié)果:

Python使用Opencv實(shí)現(xiàn)邊緣檢測(cè)以及輪廓檢測(cè)的實(shí)現(xiàn)

Canny函數(shù)的原型為

cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]])

必要參數(shù):第一個(gè)參數(shù)是需要處理的原圖像,該圖像必須為單通道的灰度圖;第二個(gè)參數(shù)是滯后閾值1;第三個(gè)參數(shù)是滯后閾值2。

輪廓檢測(cè)

輪廓檢測(cè)主要由cv2.findContours函數(shù)實(shí)現(xiàn)的。函數(shù)的原型為

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])

函數(shù)參數(shù)第一個(gè)參數(shù)是尋找輪廓的圖像;

第二個(gè)參數(shù)表示輪廓的檢索模式,有四種(本文介紹的都是新的cv2接口):

cv2.RETR_EXTERNAL表示只檢測(cè)外輪廓 。 cv2.RETR_LIST檢測(cè)的輪廓不建立等級(jí)關(guān)系。 cv2.RETR_CCOMP建立兩個(gè)等級(jí)的輪廓,上面的一層為外邊界,里面的一層為內(nèi)孔的邊界信息。如果內(nèi)孔內(nèi)還有一個(gè)連通物體,這個(gè)物體的邊界也在頂層。 cv2.RETR_TREE建立一個(gè)等級(jí)樹(shù)結(jié)構(gòu)的輪廓。

第三個(gè)參數(shù)method為輪廓的逼近方法

cv2.CHAIN_APPROX_NONE存儲(chǔ)所有的輪廓點(diǎn),相鄰的兩個(gè)點(diǎn)的像素位置差不超過(guò)1,即max(abs(x1-x2),abs(y2-y1))==1。 cv2.CHAIN_APPROX_SIMPLE壓縮水平方向,垂直方向,對(duì)角線方向的元素,只保留該方向的終點(diǎn)坐標(biāo),例如一個(gè)矩形輪廓只需4個(gè)點(diǎn)來(lái)保存輪廓信息。 cv2.CHAIN_APPROX_TC89_L1和cv2.CHAIN_APPROX_TC89_KCOS都是使用teh-Chinl chain近似算法。

返回值

如:image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

image:是原圖像

contours:圖像的輪廓,以列表的形式表示,每個(gè)元素都是圖像中的一個(gè)輪廓。

hier:相應(yīng)輪廓之間的關(guān)系。這是一個(gè)ndarray,其中的元素個(gè)數(shù)和輪廓個(gè)數(shù)相同,每個(gè)輪廓contours[i]對(duì)應(yīng)4個(gè)hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分別表示后一個(gè)輪廓、前一個(gè)輪廓、父輪廓、內(nèi)嵌輪廓的索引編號(hào),如果沒(méi)有對(duì)應(yīng)項(xiàng),則該值為負(fù)數(shù)。

原圖:

Python使用Opencv實(shí)現(xiàn)邊緣檢測(cè)以及輪廓檢測(cè)的實(shí)現(xiàn)

示例一

import cv2import numpy as npimg = cv2.pyrDown(cv2.imread('hammer.jpg', cv2.IMREAD_UNCHANGED))# threshold 函數(shù)對(duì)圖像進(jìn)行二化值處理,由于處理后圖像對(duì)原圖像有所變化,因此img.copy()生成新的圖像,cv2.THRESH_BINARY是二化值ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY), 127, 255, cv2.THRESH_BINARY)# findContours函數(shù)查找圖像里的圖形輪廓# 函數(shù)參數(shù)thresh是圖像對(duì)象# 層次類型,參數(shù)cv2.RETR_EXTERNAL是獲取最外層輪廓,cv2.RETR_TREE是獲取輪廓的整體結(jié)構(gòu)# 輪廓逼近方法# 輸出的返回值,image是原圖像、contours是圖像的輪廓、hier是層次類型image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)for c in contours: # 輪廓繪制方法一 # boundingRect函數(shù)計(jì)算邊框值,x,y是坐標(biāo)值,w,h是矩形的寬和高 x, y, w, h = cv2.boundingRect(c) # 在img圖像畫(huà)出矩形,(x, y), (x + w, y + h)是矩形坐標(biāo),(0, 255, 0)設(shè)置通道顏色,2是設(shè)置線條粗度 cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) # 輪廓繪制方法二 # 查找最小區(qū)域 rect = cv2.minAreaRect(c) # 計(jì)算最小面積矩形的坐標(biāo) box = cv2.boxPoints(rect) # 將坐標(biāo)規(guī)范化為整數(shù) box = np.int0(box) # 繪制矩形 cv2.drawContours(img, [box], 0, (0, 0, 255), 3) # 輪廓繪制方法三 # 圓心坐標(biāo)和半徑的計(jì)算 (x, y), radius = cv2.minEnclosingCircle(c) # 規(guī)范化為整數(shù) center = (int(x), int(y)) radius = int(radius) # 勾畫(huà)圓形區(qū)域 img = cv2.circle(img, center, radius, (0, 255, 0), 2)# # 輪廓繪制方法四# 圍繞圖形勾畫(huà)藍(lán)色線條cv2.drawContours(img, contours, -1, (255, 0, 0), 2)# 顯示圖像cv2.imshow('contours', img)cv2.waitKey()cv2.destroyAllWindows()

運(yùn)行結(jié)果如圖所示:

Python使用Opencv實(shí)現(xiàn)邊緣檢測(cè)以及輪廓檢測(cè)的實(shí)現(xiàn)

示例二

import cv2import numpy as npimg = cv2.pyrDown(cv2.imread('hammer.jpg', cv2.IMREAD_UNCHANGED))ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY) , 127, 255, cv2.THRESH_BINARY)# findContours函數(shù)查找圖像里的圖形輪廓# 函數(shù)參數(shù)thresh是圖像對(duì)象# 層次類型,參數(shù)cv2.RETR_EXTERNAL是獲取最外層輪廓,cv2.RETR_TREE是獲取輪廓的整體結(jié)構(gòu)# 輪廓逼近方法# 輸出的返回值,image是原圖像、contours是圖像的輪廓、hier是層次類型image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 創(chuàng)建新的圖像blackblack = cv2.cvtColor(np.zeros((img.shape[1], img.shape[0]), dtype=np.uint8), cv2.COLOR_GRAY2BGR)for cnt in contours: # 輪廓周長(zhǎng)也被稱為弧長(zhǎng)。可以使用函數(shù) cv2.arcLength() 計(jì)算得到。這個(gè)函數(shù)的第二參數(shù)可以用來(lái)指定對(duì)象的形狀是閉合的(True) ,還是打開(kāi)的(一條曲線) epsilon = 0.01 * cv2.arcLength(cnt, True) # 函數(shù)approxPolyDP來(lái)對(duì)指定的點(diǎn)集進(jìn)行逼近,cnt是圖像輪廓,epsilon表示的是精度,越小精度越高,因?yàn)楸硎镜囊馑际鞘窃记€與近似曲線之間的最大距離。 # 第三個(gè)函數(shù)參數(shù)若為true,則說(shuō)明近似曲線是閉合的,它的首位都是相連,反之,若為false,則斷開(kāi)。 approx = cv2.approxPolyDP(cnt, epsilon, True) # convexHull檢查一個(gè)曲線的凸性缺陷并進(jìn)行修正,參數(shù)cnt是圖像輪廓。 hull = cv2.convexHull(cnt) # 勾畫(huà)圖像原始的輪廓 cv2.drawContours(black, [cnt], -1, (0, 255, 0), 2) # 用多邊形勾畫(huà)輪廓區(qū)域 cv2.drawContours(black, [approx], -1, (255, 255, 0), 2) # 修正凸性缺陷的輪廓區(qū)域 cv2.drawContours(black, [hull], -1, (0, 0, 255), 2)# 顯示圖像cv2.imshow('hull', black)cv2.waitKey()cv2.destroyAllWindows()

運(yùn)行結(jié)果如圖所示:

Python使用Opencv實(shí)現(xiàn)邊緣檢測(cè)以及輪廓檢測(cè)的實(shí)現(xiàn)

參考資料:OpenCV 3計(jì)算機(jī)視覺(jué) Python語(yǔ)言實(shí)現(xiàn)第二版

到此這篇關(guān)于Python使用Opencv實(shí)現(xiàn)邊緣檢測(cè)以及輪廓檢測(cè)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python 邊緣檢測(cè)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久久国产精品一区二区| 国产伦精品一区二区三区视频| 精品中国亚洲| 欧美极品中文字幕| 免费在线亚洲欧美| 精品中文在线| 欧美aa一级| 天堂资源在线亚洲| 欧美日韩免费观看一区=区三区| 香蕉精品视频在线观看| 九一精品国产| 久久免费大视频| 伊人成人网在线看| 亚洲一区二区三区久久久| 免费视频最近日韩| 日韩综合一区二区三区| 国产欧美激情| 粉嫩av一区二区三区四区五区 | 黄色aa久久| 国产精品久久久久av电视剧| 天堂日韩电影| 中文字幕成人| 婷婷精品久久久久久久久久不卡| 亚久久调教视频| 国产美女久久| 国产福利91精品一区二区| 激情中国色综合| 婷婷综合六月| 久久成人一区| 国产精品一区毛片| 日韩88av| 亚洲经典在线| 欧美日韩网址| 吉吉日韩欧美| 亚洲欧美日韩国产| 欧美日韩1区2区3区| 国产成人黄色| 久久精品官网| 亚洲啊v在线免费视频| 国产欧美一区二区精品久久久 | 欧美激情亚洲| 久久人人精品| 亚洲欧洲av| 国产一区二区亚洲| 亚洲欧美日韩国产| 国产精品一区二区精品| 日韩欧美二区| 亚洲欧美视频| 国产精品入口久久| 91精品国产乱码久久久久久久| 蜜臀精品久久久久久蜜臀| 国产欧美一区二区三区米奇| 日本在线精品| 91亚洲精品在看在线观看高清| 91麻豆国产自产在线观看亚洲| 中文在线一区| 久久精品午夜| 在线综合欧美| 国产精品2023| 99国产精品久久久久久久| 久久国际精品| 黑丝美女一区二区| 日韩成人一级| 九九色在线视频| 日韩黄色在线观看| 久久久精品久久久久久96 | 夜夜精品视频| 久久久久亚洲精品中文字幕| 在线亚洲自拍| 精品国产一区二区三区av片| 亚洲作爱视频| 国内精品伊人| 亚洲青青久久| 久久久久久久久丰满| 亚洲精品动态| 久久在线免费| 麻豆国产精品| 综合国产精品| 天堂日韩电影| 久久一区欧美| 婷婷精品在线观看| 婷婷丁香综合| 久久精品网址| 日韩中文一区二区| 久久一级电影| 日韩av专区| 国产精品亚洲四区在线观看| 夜夜精品视频| 日韩在线短视频| 日韩欧美高清一区二区三区| 蜜桃成人av| 四虎国产精品免费观看| 日本亚洲三级在线| 91精品电影| 中文字幕色婷婷在线视频 | 在线日韩成人| 国精品一区二区三区| 国产成人调教视频在线观看| 日韩视频1区| 欧美日韩国产欧| 在线中文字幕播放| 免费在线欧美黄色| 亚洲视频电影在线| 蜜臀久久99精品久久一区二区| 精品国产黄a∨片高清在线| 日韩精品中文字幕吗一区二区| 国产婷婷精品| 五月精品视频| japanese国产精品| 久久久9色精品国产一区二区三区| 精品久久中文| 久久a爱视频| 国产精品一国产精品| 亚洲美女久久| 性色av一区二区怡红| 欧美中文一区二区| 欧美gv在线| 给我免费播放日韩视频| 国产精品麻豆成人av电影艾秋| 日韩毛片一区| 91欧美极品| 欧美一级久久| 91精品日本| 国产情侣久久| 久久不见久久见免费视频7| 国产乱人伦丫前精品视频| 日韩亚洲精品在线观看| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 亚洲日产av中文字幕| 99香蕉国产精品偷在线观看| 在线日韩视频| 欧美aa国产视频| 蜜桃tv一区二区三区| 九九久久电影| 在线午夜精品| 亚洲色图网站| 日韩高清在线观看一区二区| 久久国产尿小便嘘嘘| 国产精品亚洲欧美| 国模精品一区| 国产综合色区在线观看| 亚洲国内欧美| 欧美色图国产精品| 欧美另类综合| 中文字幕av一区二区三区人| 日本亚洲视频| 久久一区精品| 亚洲播播91| 一区免费视频| 日韩国产在线观看一区| 国产伦精品一区二区三区千人斩| 精品无人区麻豆乱码久久久| 日韩电影在线视频| 国产免费成人| 亚洲精品免费观看| 国产欧美日韩免费观看| 国产96在线亚洲| 裤袜国产欧美精品一区| 99精品网站| 蜜臀久久99精品久久久画质超高清 | 日韩精品三级| 麻豆一区二区99久久久久| 亚洲精品福利电影| 欧美在线资源| 亚洲青青久久| 久久精品一区二区国产| 日韩另类视频| 免费观看在线综合色| 日本视频在线一区| 国产不卡精品| 亚洲综合精品四区| 国产精品久久| 亚洲一级黄色| 日韩国产欧美视频| 亚洲午夜天堂| 免费人成在线不卡| 国产精品一区二区三区四区在线观看 | 久久久天天操| 日韩欧美2区| 日韩国产专区| 亚洲在线免费| 久久三级毛片| 欧美精选一区二区三区| 日韩激情视频网站| 色网在线免费观看| 丝袜美腿亚洲一区二区图片| 国产精品久久久久久久久久妞妞 | 久久不见久久见中文字幕免费| 麻豆成全视频免费观看在线看| 国产精品美女久久久| 国产精品一区二区精品 | 欧美日韩中文一区二区| 久久国产麻豆精品| 国产专区一区| 国产精品超碰| 在线综合欧美| 日本久久黄色| 日韩一区二区三区四区五区| 亚洲国产欧美日本视频| 视频一区日韩|