精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

OpenCV成長之路:直線、輪廓的提取與描述

移動開發 Android
基于內容的圖像分析的重點是提取出圖像中具有代表性的特征,而線條、輪廓、塊往往是最能體現特征的幾個元素,這篇文章就針對于這幾個重要的圖像特征,研究它們在OpenCV中的用法,以及做一些簡單的基礎應用。

本文是51CTO博客作者Ronny的文章,原文地址。

基于內容的圖像分析的重點是提取出圖像中具有代表性的特征,而線條、輪廓、塊往往是最能體現特征的幾個元素,這篇文章就針對于這幾個重要的圖像特征,研究它們在OpenCV中的用法,以及做一些簡單的基礎應用。

一、Canny檢測輪廓

在 上一篇文章中有提到sobel邊緣檢測,并重寫了soble的C++代碼讓其與matlab中算法效果一致,而soble邊緣檢測是基于單一閾值的,我們 不能兼顧到低閾值的豐富邊緣和高閾值時的邊緣缺失這兩個問題。而canny算子則很好的彌補了這一不足,從目前看來,canny邊緣檢測在做圖像輪廓提取 方面是***秀的邊緣檢測算法。

canny邊緣檢測采用雙閾值值法,高閾值用來檢測圖像中重要的、顯著的線條、輪廓等,而低閾值用來保證不丟失細節部分,低閾值檢測出來的邊緣更豐富,但是很多邊緣并不是我們關心的。***采用一種查找算法,將低閾值中與高閾值的邊緣有重疊的線條保留,其他的線條都刪除。

本篇文章中不對canny的算法原理作進一步說明,稍后會在圖像處理算法相關的文章中詳細介紹。

下面我們用OpenCV中的Canny函數來檢測圖像邊緣

  1. int main() 
  2.     Mat I=imread("../cat.png"); 
  3.     cvtColor(I,I,CV_BGR2GRAY); 
  4.                                                  
  5.     Mat contours; 
  6.     Canny(I,contours,125,350); 
  7.     threshold(contours,contours,128,255,THRESH_BINARY); 
  8.     namedWindow("Canny"); 
  9.     imshow("Canny",contours); 
  10.     waitKey(); 
  11.     return 0; 

顯示效果如下:

image

二、直線檢測

直線在圖像中出現的頻率非常之高,而直線作為圖像的特征對于基本內容的圖像分析有著很重要的作用,本文通過OpenCV中的hough變換來檢測圖像中的線條。

我們先看最基本的Hough變換函數HoughLines,它的原型如下:

  1. void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 ); 

它的輸入是一個二值的輪廓圖像,往往是邊緣檢測得到的結果圖像;它的輸出是一個包含多個Vec2f點的數組,數組中的每個元素是一個二元浮點數據 對<rou,theta>,rou代表直線離坐標原點的距離,theta代表角度。第3和第4個參數代表步長,因為Hough變換實際上是一 個窮舉的算法,rho表示距離的步長,theta代表角度的步長。第5個參數是一個閾值設置直接的***投票個數,知道Hough原理的,這個參數應該很容 易理解。

從 這個函數的輸出結果我們可以看出,得到的直線并沒有指定在圖像中的開始點與結束點,需要我們自己去計算,如果我們想把直接顯示在圖像中就會比較麻煩,而且 會有很多角度接近的直線,其實它們是重復的,為了解決上面這些問題,OpenCV又提供了一個函數HoughLinesP()。它的輸出是一個 Vector of Vec4i。Vector每一個元素代表一條直線,是由一個4元浮點數組構成,前兩個點一組,后兩個點一組,代表了在圖像中直線的起始和結束點。

  1. void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta,int threshold, double minLineLength=0, double maxLineGap=0 ); 

解釋一下***兩個參數,minLineLength指定了檢測直線中的最小寬度,如果低于最小寬度則舍棄掉,maxLineGap指定通過同一點的直線,如果距離小于maxLineGap就會進行合并。

下面是一個用HoughLinesP檢測直線的例子:

  1. int main() 
  2.     Mat image=imread("../car.png"); 
  3.     Mat I; 
  4.     cvtColor(image,I,CV_BGR2GRAY); 
  5.                              
  6.     Mat contours; 
  7.     Canny(I,contours,125,350); 
  8.     threshold(contours,contours,128,255,THRESH_BINARY); 
  9.     vector<Vec4i> lines; 
  10.     // 檢測直線,最小投票為90,線條不短于50,間隙不小于10 
  11.     HoughLinesP(contours,lines,1,CV_PI/180,80,50,10); 
  12.     drawDetectLines(image,lines,Scalar(0,255,0)); 
  13.     namedWindow("Lines"); 
  14.     imshow("Lines",image); 
  15.     waitKey(); 
  16.     return 0; 

上面程序將檢測到的線條保存在lines變量內,我們需要進一步將它們畫在圖像上:

  1. void drawDetectLines(Mat& image,const vector<Vec4i>& lines,Scalar & color) 
  2.     // 將檢測到的直線在圖上畫出來 
  3.     vector<Vec4i>::const_iterator it=lines.begin(); 
  4.     while(it!=lines.end()) 
  5.     { 
  6.         Point pt1((*it)[0],(*it)[1]); 
  7.         Point pt2((*it)[2],(*it)[3]); 
  8.         line(image,pt1,pt2,color,2); //  線條寬度設置為2 
  9.         ++it; 
  10.     } 

image

實 際上Hough變換可以檢測很多固定的形狀,比如:圓、正方形等。它們的原理基本相同,都是構造一個投票矩陣。OpenCV里提供了檢測圓的函數 HoughCircles,它的輸出是一個Vector of Vec3i,Vector的每個元素包含了3個浮點數,前2個是圓的中心坐標,***一個是半徑。

三、輪廓的提取與描述

在目標識別中我們首先要把感興趣的目標提取出來,而一般常見的步驟都是通過顏色或紋理提取出目標的前景圖(一幅黑白圖像,目標以白色顯示在圖像中),接下來我們要對前景圖進行分析進一步地把目標提取出來,而這里常常用到的就是提取目標的輪廓。

OpenCV 里提取目標輪廓的函數是findContours,它的輸入圖像是一幅二值圖像,輸出的是每一個連通區域的輪廓點的集 合:vector<vector<Point>>。外層vector的size代表了圖像中輪廓的個數,里面vector的 size代表了輪廓上點的個數。下面我們通過實例來看函數的用法。

  1. int main() 
  2.   { 
  3.       using namespace cv; 
  4.              
  5.       Mat image=imread("../shape.png"); 
  6.       cvtColor(image,image,CV_BGR2GRAY); 
  7.      vector<vector<Point>> contours; 
  8.      // find 
  9.      findContours(image,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE); 
  10.     // draw 
  11.      Mat result(image.size(),CV_8U,Scalar(0)); 
  12.      drawContours(result,contours,-1,Scalar(255),2); 
  13.             
  14.      namedWindow("contours"); 
  15.      imshow("contours",result); 
  16.      waitKey(); 
  17.      return 0; 

image

上面程序中包含了2個函數,***個是查找輪廓函數,它的第三個參數說明查找輪廓的類型,這里我們使用的是外輪廓,還可以查找所有輪廓,即包括一些孔洞的部 分,像圖像人物胳膊與腰間形成的輪廓。第4個參數說明了輪廓表示的方法,程序中的參數說明輪廓包括了所有點,也可以用其他參數讓有點直線的地方,只保存直 線起始與終點的位置點,具體參數用法可以參考手冊里函數的介紹。

第二個函數drawContours是一個畫輪廓的函數,它的第3個參數程序里設置-1表示所有的輪廓都畫,你也可以指定要畫的輪廓的序號。

提取到輪廓后,其實我們更關心的是如果把這些輪廓轉換為可以利用的特征,也就是涉及到輪廓的描述問題,這時就有多種方法可以選擇,比如矢量化為多邊形、矩形、橢圓等。OpenCV里提供了一些這樣的函數。

  1. // 輪廓表示為一個矩形 
  2. Rect r = boundingRect(Mat(contours[0])); 
  3. rectangle(result, r, Scalar(255), 2); 
  4. // 輪廓表示為一個圓 
  5. float radius; 
  6. Point2f center; 
  7. minEnclosingCircle(Mat(contours[1]), center, radius); 
  8. circle(result, Point(center), static_cast<int>(radius), Scalar(255), 2); 
  9. // 輪廓表示為一個多邊形 
  10. vector<Point> poly; 
  11. approxPolyDP(Mat(contours[2]), poly, 5, true); 
  12. vector<Point>::const_iterator itp = poly.begin(); 
  13. while (itp != (poly.end() - 1)) 
  14.     line(result, *itp, *(itp + 1), Scalar(255), 2); 
  15.     ++itp; 
  16. line(result, *itp, *(poly.begin()), Scalar(255), 2); 
  17. // 輪廓表示為凸多邊形 
  18. vector<Point> hull; 
  19. convexHull(Mat(contours[3]), hull); 
  20. vector<Point>::const_iterator ith = hull.begin(); 
  21. while (ith != (hull.end() - 1)) 
  22.     line(result, *ith, *(ith + 1), Scalar(255), 2); 
  23.     ++ith; 
  24. line(result, *ith, *(hull.begin()), Scalar(255), 2); 

程序中我們依次畫了矩形、圓、多邊形和凸多邊形。最終效果如下:

image

對連通區域的分析到此遠遠沒有結束,我們可以進一步計算每一個連通區域的其他屬性,比如:重心、中心矩等特征,這些內容以后有機會展開來寫。

以 下幾個函數可以嘗試:minAreaRect:計算一個最小面積的外接矩形,contourArea可以計算輪廓內連通區域的面 積;pointPolygenTest可以用來判斷一個點是否在一個多邊形內。mathShapes可以比較兩個形狀的相似性,相當有用的一個函數。

責任編輯:徐川 來源: 51CTO博客
相關推薦

2021-11-29 08:24:57

騰訊技術職業

2013-02-26 09:41:31

微信Line

2022-08-24 15:57:17

圖片輪廓

2009-12-14 15:18:38

2013-04-15 11:08:00

架構師Web

2013-04-15 10:09:18

Web架構師

2015-03-30 17:08:55

IT服務神州數碼華為

2009-07-08 13:08:30

JNCIEJuniper認證

2012-04-05 10:25:02

WEB架構師

2010-07-20 13:52:27

SQL Server

2024-01-30 12:07:51

2020-12-10 06:27:19

技術人

2012-03-31 10:00:05

WEB架構師

2010-08-20 15:21:11

2021-08-22 15:14:00

Vue開發前端

2012-05-23 09:32:01

2023-08-20 12:21:18

軟件開發架構設計

2018-01-09 15:39:42

云計算網絡安全

2021-07-20 09:39:35

前端開發技術
點贊
收藏

51CTO技術棧公眾號

亚洲综合欧美激情| 伊人情人网综合| 天堂网免费视频| 日韩啪啪电影网| 日韩一区国产二区欧美三区| 日本大片免费看| 欧美精品久久久久久久久久丰满| 免费在线观看不卡| 欧美精品videosex牲欧美| 三上悠亚影音先锋| 91国内精品白嫩初高生| 波多野结衣mp4| 亚洲国产www| 国产亚洲一级| 久久资源免费视频| 免费看污片网站| 日韩一级淫片| 欧美性xxxxx极品少妇| 久久免费一级片| 国内三级在线观看| 成人毛片在线观看| 国产精品自拍偷拍| 国产99久久久| 极品中文字幕一区| www.久久撸.com| 亚洲蜜桃精久久久久久久久久久久| a级黄色小视频| 日韩特黄一级片| 伊人成综合网| 中文字幕日韩欧美在线视频| 国产一卡二卡三卡四卡| 经典三级久久| 欧美日韩精品一区二区三区蜜桃| 国产 福利 在线| 美女精品视频| 亚洲精品综合在线| 一区二区三区四区国产| 国产小视频在线播放| 99免费精品视频| 国产经品一区二区| 性一交一乱一乱一视频| 国产主播一区二区| 91久久精品美女| 一区精品在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 91av福利视频| 国产成人无码一区二区三区在线| 国产精品多人| 欧美激情一级精品国产| 国产这里有精品| 欧美一区高清| 九九精品视频在线观看| 极品颜值美女露脸啪啪| 亚洲国产一区二区三区在线播放| 日韩在线观看视频免费| 男女男精品视频网站| 中文字幕亚洲乱码| 九色porny丨国产首页在线| 亚洲国产视频一区二区| 97超碰国产精品| 大桥未久在线播放| 亚洲第一成年网| 日韩精品视频久久| 欧美色999| 欧美日韩亚洲另类| 亚洲男人天堂av在线| 亚洲青青一区| 日韩欧美国产不卡| 亚洲色图欧美另类| 久久影视三级福利片| 亚洲精品国偷自产在线99热| 内射中出日韩无国产剧情| 蜜桃a∨噜噜一区二区三区| 亚洲人成电影在线| 免费黄在线观看| 婷婷成人基地| 久久久久久久久久国产精品| 日韩福利片在线观看| 久久久青草婷婷精品综合日韩| 国产成人av在线播放| 在线观看国产黄| 国v精品久久久网| 九九九九精品| av网站无病毒在线| 亚洲女人的天堂| 成人在线观看你懂的| 日韩精品专区| 欧美一区永久视频免费观看| 欧亚乱熟女一区二区在线| 一区二区三区日本久久久 | 欧美在线观看网站| 中文字幕 视频一区| 国产成人综合在线观看| 欧美久久在线| 18加网站在线| 色综合一区二区| 日本精品一区在线| 香蕉视频一区二区三区| 日韩视频免费中文字幕| 日韩黄色一级大片| 久久99精品一区二区三区| 国产精品久久精品视| jizz在线观看视频| 亚洲6080在线| 久国产精品视频| 天美av一区二区三区久久| 精品国模在线视频| 欧美a视频在线观看| 国产精品一区二区三区乱码| 欧美日韩中文国产一区发布| 色爱综合区网| 欧美日韩免费视频| 国产男男chinese网站| 国产精品分类| 国产在线观看91精品一区| 日漫免费在线观看网站| 亚洲综合色网站| 国产色视频在线播放| 西野翔中文久久精品字幕| 欧美精品一本久久男人的天堂| jizz国产在线观看| 成人福利在线看| 男同互操gay射视频在线看| 日本精品裸体写真集在线观看| 亚洲福利在线视频| 青娱乐国产在线视频| 韩国女主播成人在线观看| 日韩高清av电影| 多野结衣av一区| 精品日韩欧美在线| 紧身裙女教师波多野结衣| 日韩国产在线观看| 欧美精品久久久| 国产激情视频在线看| 91精品国产91综合久久蜜臀| 老司机福利在线观看| 视频一区二区三区入口| 欧美在线一区二区三区四区| 草草在线视频| 亚洲高清在线观看| 久久影院一区二区| 国产福利91精品| 糖心vlog在线免费观看| 国产精品美女久久久久人| www.精品av.com| 国产免费无遮挡| 中文字幕亚洲一区二区av在线| 亚洲成人福利在线观看| 国产一区二区三区四区五区 | 成人全视频免费观看在线看| 日韩精品在线看| 日韩欧美成人一区二区三区 | 555夜色666亚洲国产免| 国产精品久久国产精麻豆96堂| 免费观看久久久4p| 一区二区三区四区国产| 国产精品日本一区二区三区在线 | 日韩精品一区二区三区三区免费| 国产黄色小视频网站| 国产一区二区精品在线观看| 午夜久久久久久久久久久| 榴莲视频成人app| 欧美国产日韩中文字幕在线| 丰满人妻一区二区三区无码av| 亚洲国产你懂的| 97伦伦午夜电影理伦片| 日韩精品一区第一页| 一区不卡字幕| 一区二区三区四区高清视频| 午夜精品免费视频| 国产一区精品| 欧美日韩免费不卡视频一区二区三区| 潘金莲一级黄色片| 成人免费黄色在线| 超碰97人人射妻| 色小子综合网| 成人av中文| 高清不卡av| 精品久久久av| 三级网站在线看| 色噜噜狠狠成人网p站| 美国一级片在线观看| 高清久久久久久| 亚洲午夜无码av毛片久久| 成人同人动漫免费观看 | 欧美激情一区二区三区在线视频观看 | 欧美亚洲色综久久精品国产| 国产伦精品一区二区三区在线观看 | 成人av电影天堂| av手机在线观看| 中文字幕日韩综合av| www.亚洲欧美| 色婷婷综合久久久中文一区二区| 女同久久另类69精品国产| aaa欧美日韩| 超碰成人在线播放| 国产精品夜夜夜| 成人在线观看www| 自拍偷拍一区| av激情久久| 巨胸喷奶水www久久久免费动漫| 欧美老女人性生活| 国产片在线观看| 欧美videossexotv100| av手机天堂网| 亚洲午夜久久久久久久久电影院 | 欧美洲成人男女午夜视频| 激情影院在线观看| 亚洲乱码国产乱码精品精| 国产不卡精品视频| 欧洲一区在线电影| 国产性xxxx高清| 亚洲人成在线播放网站岛国| 在线免费观看麻豆| 成人免费高清视频| 99国产精品久久久久久| 久久亚洲不卡| 伊人成色综合网| 欧美精品1区| 伊人天天久久大香线蕉av色| 亚洲人和日本人hd| 国产一区二区三区黄| 精品一区二区三区中文字幕在线| 国产精品吊钟奶在线| 欧美一级鲁丝片| 久久久久久久国产| 欧美v亚洲v| 欧美成aaa人片免费看| 91这里只有精品| 亚洲午夜未删减在线观看 | 超碰在线观看91| 精品久久久久久久久久国产| 欧美成人黄色网| 亚洲人成网站在线| av黄色免费在线观看| 欧美极品美女视频| 国产三级av在线播放| 久久人人97超碰com| av2014天堂网| 99精品视频一区| 第四色在线视频| 99久久婷婷国产综合精品| 黄色国产在线视频| 懂色av一区二区三区免费观看| 日本高清免费观看| 国产在线国偷精品免费看| 精品综合久久久久| 国产一区在线看| 久久久久久国产精品日本| 国产一区999| 免费不卡av网站| 国产999精品久久| 波多野结衣三级视频| 成人国产视频在线观看| 国产精品麻豆入口| 91丨九色丨蝌蚪丨老版| mm131丰满少妇人体欣赏图| 久久久www成人免费毛片麻豆 | 日本韩国免费观看| 亚洲国内高清视频| 青青草在线免费视频| 国产小视频国产精品| 2019中文字幕在线视频| 久久精品中文字幕一区| 性欧美video高清bbw| 97在线视频免费看| 亚洲欧美一区二区三区| 国产精品久久久999| aa亚洲一区一区三区| 99精品国产高清一区二区| 国产伦精品一区二区三区免费优势| 国产偷国产偷亚洲高清97cao| 人人网欧美视频| 亚洲二区三区四区| 欧美一区二区| 啊啊啊一区二区| 蜜臀a∨国产成人精品| 男人操女人下面视频| 91视频xxxx| 成人18视频免费69| 夜夜操天天操亚洲| 中文字幕一区二区三区四区欧美| 欧美日韩国产小视频| 亚洲精品成人电影| 亚洲人成在线观| 3d玉蒲团在线观看| 欧美在线视频观看| 国产在线一区不卡| 久久人人九九| 91精品一区二区三区综合| 成人免费性视频| 日本欧美久久久久免费播放网| 五月六月丁香婷婷| 久久久91精品国产一区二区精品| 国产精品免费在线视频| 午夜精品久久久久久久蜜桃app| 中文字幕乱码一区二区| 精品国精品国产| 天天综合视频在线观看| 国内揄拍国内精品少妇国语| 久久精品国产福利| 精品视频第一区| 一本一道久久a久久精品蜜桃| 免费观看日韩毛片| 国产一区二区剧情av在线| 亚洲人成人无码网www国产| 一区二区三区 在线观看视频| 中文字幕手机在线视频| 亚洲成人精品视频| 欧美激情办公室videoshd| 日本国产欧美一区二区三区| 亚洲啊v在线免费视频| 色一情一区二区三区四区| 宅男噜噜噜66国产日韩在线观看| 91高清国产视频| 国产亚洲精品bt天堂精选| 在线看成人av| 欧美一二三在线| 麻豆影院在线观看| 国产精品美女午夜av| 欧美一级一片| 精品一区二区三区无码视频| 久久er精品视频| 特级西西www444人体聚色 | 亚洲专区**| 一区二区在线观看网站| 日韩一区精品视频| 精品国产无码在线观看| 午夜精品福利一区二区三区av | 久久精品免费av| 91麻豆精品国产自产在线 | 欧美激情在线观看视频| 亚洲青青一区| 最新国产精品久久| 久久精品久久久精品美女| 97伦伦午夜电影理伦片| 欧美日韩一区二区免费视频| 视频一区二区免费| 久久久噜噜噜久久中文字免| jizz国产精品| 亚洲理论电影在线观看| 丰满放荡岳乱妇91ww| 免费一级片在线观看| 日韩三级av在线播放| 天使と恶魔の榨精在线播放| 亚洲综合日韩中文字幕v在线| 亚洲深深色噜噜狠狠爱网站| 性欧美在线视频| 亚洲色图在线播放| 国产人妖一区二区三区| 欧美成人免费全部| 99精品国产一区二区三区2021| 久久久久久久久久久综合| 国产成人啪午夜精品网站男同| 久久久久99精品成人片毛片| 欧美本精品男人aⅴ天堂| 麻豆av在线播放| 国产欧美一区二区三区另类精品 | 亚洲经典一区二区三区| 久久久亚洲国产| 亚洲伊人春色| 亚洲欧洲日本精品| 亚洲欧美色一区| 成人精品在线播放| 亚州av一区二区| 精品一区在线| 天天操狠狠操夜夜操| 亚洲伦在线观看| 天堂网在线资源| 国产极品精品在线观看| 日韩欧美精品一区| 91av免费观看| 五月天网站亚洲| 成年人视频在线观看免费| 91亚洲国产成人精品性色| 国产综合网站| 手机免费看av| 91精品国产综合久久精品性色| 成人女同在线观看| 日韩精品在在线一区二区中文| 精品亚洲国产成人av制服丝袜| 免费在线观看日韩| 亚洲欧美三级在线| 免费一级欧美在线大片 | 激情五月激情综合网| 精品在线视频免费观看| 亚洲人成网站在线播| 日韩一区网站| 蜜臀av午夜一区二区三区 | 国产精品一区二区三区四| 在线成人中文字幕| 国产精品毛片视频| 污版视频在线观看| 亚洲成av人**亚洲成av**| av国产在线观看| 国产美女精品久久久| 另类欧美日韩国产在线| 日本特黄一级片| 日韩视频第一页| 久久不见久久见国语|