亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

OpenCV實現輪廓的發現

2020-01-26 13:27:35
字體:
來源:轉載
供稿:網友

前言:

        當我們通過閾值分割提取到圖像中的目標物體后,我們就需要通過邊緣檢測來提取目標物體的輪廓,使用這兩種方法基本能夠確定物體的邊緣或者前景。接下來,我們通常需要做的是擬合這些邊緣的前景,如擬合出包含前景或者邊緣像素點的最小外包矩形、圓、凸包等幾何形狀,為計算它們的面積或者模板匹配等操作打下堅實的基礎。

一、查找、繪制輪廓

      首先了解一下輪廓的定義。一個輪廓代表一系列的點(像素),這一系列的點構成一個有序的點集,所以可以把一個輪廓理解為一個有序的點集。

1.1 findContour()函數

        在OpenCV中,提供了一個函數返回或者輸出一個有序的點集或者有序的點集的集合(指多個有序的點集),函數findContour是從二值圖像中來計算輪廓的,它可以使用Canny()函數處理的圖像,因為這樣的圖像含有邊緣像素;也可以使用threshold()或者adaptiveThreshold()處理后的圖像,其邊緣隱含在正負區域的交界處。這個函數的聲明如下:

void findContours(InputOutputArray image,OutputArrayOfArrays contours,OutputArray hierarchy,int mode,int method,Point offset = Point());

其參數解釋如下:

(1)image:單通道圖像矩陣,可以是灰度圖,但更常用的是二值圖像,一般是經過Canny、拉普拉斯等邊緣檢測算子處理過的二值圖像;

(2)contours:vector<vector<Point>>類型,是一個向量,并且是一個雙重向量,向量內每個元素保存了一組由連續的Point點構成的點的集合的向量,每一組Point點集就是一個輪廓。有多少輪廓,向量contours就有多少元素。

(3)hierarchy:vector<Vec4i> 類型, Vec4i是Vec<int,4>的別名,即容器內每一個元素都是一個包含了4個int型變量的向量,所以從定義上看,hierarchy也是一個向量,向量內每個元素保存了一個包含4個int整型的數組。向量hiararchy內的元素和輪廓向量contours內的元素是一一對應的,向量的容量相同。hierarchy向量內每一個元素的4個int型變量――hierarchy[i][0] ~hierarchy[i][3],分別表示第i個輪廓的后一個輪廓、前一個輪廓、父輪廓、內嵌輪廓的索引編號。如果當前輪廓沒有對應的后一個輪廓、前一個輪廓、父輪廓或內嵌輪廓的話,則hierarchy[i][0] ~hierarchy[i][3]的相應位被設置為默認值-1。

(4)mode:int類型的,定義輪廓的檢索模式:

取值一:CV_RETR_EXTERNAL只檢測最外圍輪廓,包含在外圍輪廓內的內圍輪廓被忽略;

取值二:CV_RETR_LIST   檢測所有的輪廓,包括內圍、外圍輪廓,但是檢測到的輪廓不建立等級關系,彼此之間獨立,沒有等級關系,這就意味著這個檢索模式下不存在父輪廓或內嵌輪廓,所以hierarchy向量內所有元素的第3、第4個分量都會被置為-1,具體下文會講到;

 取值三:CV_RETR_CCOMP  檢測所有的輪廓,但所有輪廓只建立兩個等級關系,外圍為頂層,若外圍內的內圍輪廓還包含了其他的輪廓信息,則內圍內的所有輪廓均歸屬于頂層;

 取值四:CV_RETR_TREE, 檢測所有輪廓,所有輪廓建立一個等級樹結構。外層輪廓包含內層輪廓,內層輪廓還可以繼續包含內嵌輪廓。

(5) method:int類型,定義輪廓的近似方法:

取值一:CV_CHAIN_APPROX_NONE 保存物體邊界上所有連續的輪廓點到contours向量內;

取值二:CV_CHAIN_APPROX_SIMPLE 僅保存輪廓的拐點信息,把所有輪廓拐點處的點保存入contours向量內,拐點與拐點之間直線段上的信息點不予保留;

取值三和四:CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法;

(6) Point:偏移量,所有的輪廓信息相對于原始圖像對應點的偏移量,相當于在每一個檢測出的輪廓點上加上該偏移量,并且Point還可以是負值。

注意事項:

顯然,從函數名可以看出“尋找輪廓”的意思。我們可以通過邊緣檢測算法得到邊緣二值圖或者前景二值圖,二值圖的邊緣像素或者前景像素就可以被看出是由多個輪廓(點集)組成的。函數findContours的作用就是將二值圖的邊緣像素或者前景像素拆分成多個輪廓,便于分開討論每一個輪廓,其中參數image代表一張二值圖,contours代表輸出的多個輪廓。對于該函數的C++API,對一個輪廓的描述用vector<Point>,那么多個輪廓(多個點集)如何表示呢?即參數contours是什么數據結構呢?在C++API中,用vector<vector<Point>>描述多個輪廓,即將多個輪廓存在一個vector中。

1.2 drawContours()函數

OpenCV中也提供了一個函數來繪制findContours所找到的多個輪廓,其函數聲明如下:

void drawContours(InputOutputArray image,InputArrayOfArrays contours,int contourIdx,const Scalar& color,int thickness = 1,int lineType = 8,InputArray hierarchy = noArray(), int maxLevel = INT_MAX, Point offset = Point())

其參數解釋如下:

    (1)image: 代表輸入的圖像矩陣,將輪廓畫在該圖上;
    (2)contours:是得到的一系列點的集合,代表多個輪廓;
    (3)contourIdx:是一個索引,代表繪制contours中的第幾個輪廓;
    (4) color:被填充的顏色,單色可以設置為Scalar(255)等;
    (5)thickness: 所畫Contour的線條粗細,如果該參數值小于0,則表示填充整個輪廓內的區域;
    (6)lineType: 線的連通性;
    (7)hierarchy:可選層次信息結構,這里面是findContours所的到的基于Contours的層級信息;
    (8)maxLevel: 繪制輪廓的最大等級。如果等級為0,繪制單獨的輪廓。如果為1,繪制輪廓及在其后的相同的級別下輪廓。如果值為2,所有的輪廓。如果等級為2,繪制所有同級輪廓及所有低一級輪廓,諸此種種。如果值為負數,函數不繪制同級輪廓,但會升序繪制直到級別為abs(max_level)-1的子輪廓

    (9)offset:照給出的偏移量移動每一個輪廓點坐標.當輪廓是從某些感興趣區域(ROI)中提取的然后需要在運算中考慮ROI偏移量時,將會用到這個參數。

二、 演示代碼

實例步驟

  • 轉灰度
  • canny得到二值圖像
  • findcontours尋找輪廓
  • drawcontours畫輪廓

我們編寫演示代碼如下:

#include<opencv2/opencv.hpp>#include<iostream>using namespace std;using namespace cv;Mat src1, src2,gray_img, dst;int value = 100;int max_value = 255;void demo(int, void*);int main(){ //發現輪廓--> cvtcolor-->canny得到二值圖像-->findcontours(尋找輪廓)-->drawcontous() src1 = imread("C://Users//馬迎偉//Desktop//yuan1.jpg"); //src2 = imread("C://Users//馬迎偉//Desktop//heibao1.png"); if (src1.empty()) { printf("cannot load!!/n"); system("pause"); return -1; } namedWindow("input", CV_WINDOW_AUTOSIZE); imshow("input",src1); namedWindow("output", CV_WINDOW_AUTOSIZE); cvtColor(src1,gray_img,CV_BGR2GRAY); createTrackbar("creattrackbar","output",&value,max_value,demo); demo(0, 0); waitKey(0); return 0;}void demo(int, void*){ //將圖像表現在src3上 Mat src3 = Mat::zeros(src1.size(),CV_8UC3); vector<vector<Point>>contours; vector<Vec4i>hierarchy; Canny(gray_img,src2,value,value*2,3,false ); findContours(src2,contours,RETR_TREE,CHAIN_APPROX_SIMPLE,Point(0,0)); RNG rng(12345); for (size_t i = 0; i < contours.size(); i++) { Scalar color = Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)); drawContours(src3, contours, i,color,1,LINE_AA,hierarchy,0,Point(0,0)); } imshow("output",src3);}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成亚洲人成在线观看| 国产欧美 在线欧美| 国产在线精品一区免费香蕉| 欧美三级欧美成人高清www| 亚洲丝袜在线视频| 欧美日韩中文字幕日韩欧美| 欧美精品一区二区三区国产精品| 欧美黄色片在线观看| 欧美午夜宅男影院在线观看| 成人精品久久一区二区三区| 欧美激情精品久久久久久黑人| 狠狠躁夜夜躁久久躁别揉| 国产精品网红直播| 中文字幕视频一区二区在线有码| 久久天天躁狠狠躁老女人| 国模私拍一区二区三区| 国产日韩亚洲欧美| 国产精品久久电影观看| 国产精品美女主播| 久久久久久久久中文字幕| 亚洲成人网久久久| 国产成人精品午夜| 亚洲欧美日韩国产成人| 曰本色欧美视频在线| 91精品国产亚洲| 久久视频在线免费观看| 国产精品黄色影片导航在线观看| 亚洲国模精品私拍| 国产精品观看在线亚洲人成网| 久久成人精品一区二区三区| 亚洲大尺度美女在线| 亚洲97在线观看| 91精品国产色综合久久不卡98| 欧美日韩在线视频首页| 欧美与欧洲交xxxx免费观看| 成人免费在线视频网址| 欧美性xxxx极品hd欧美风情| 91免费的视频在线播放| 国产日韩在线视频| 亚洲精品免费av| 6080yy精品一区二区三区| 一个人看的www久久| 精品夜色国产国偷在线| 精品福利一区二区| 亚洲第一页自拍| 国产精品嫩草影院一区二区| 美女啪啪无遮挡免费久久网站| 日韩经典中文字幕在线观看| 日韩av一区二区在线| 午夜精品久久17c| 国产啪精品视频| 欧美日韩福利在线观看| 日韩一级黄色av| 97热在线精品视频在线观看| 欧美日韩免费一区| 国产999精品| 欧美一级大片在线观看| 91福利视频在线观看| 国产精品aaaa| 中文字幕欧美在线| 日韩免费av在线| 亚洲国产精品va在看黑人| 久久成人综合视频| 亚洲国产精久久久久久久| 欧美亚洲国产日韩2020| 久久精品国产久精国产思思| 久久免费成人精品视频| 久久免费少妇高潮久久精品99| 精品在线欧美视频| 久久人人爽人人爽爽久久| 亚洲最大成人免费视频| 欧美在线一级视频| 亚洲久久久久久久久久久| 欧洲中文字幕国产精品| 欧美亚洲国产日韩2020| 最好看的2019的中文字幕视频| 国产成人小视频在线观看| 欧美国产在线视频| 欧美一区二区色| 日韩免费观看视频| 国产综合久久久久| 亚洲激情小视频| 精品夜色国产国偷在线| 国产精品jvid在线观看蜜臀| 欧美成人午夜视频| 亚洲激情第一页| 国模精品视频一区二区三区| 日韩av理论片| yw.139尤物在线精品视频| 日韩国产精品亚洲а∨天堂免| 久久精品国产久精国产思思| 91精品中国老女人| 久99久在线视频| 亚洲欧美国内爽妇网| 午夜精品国产精品大乳美女| 午夜精品福利视频| 91精品免费看| 欧美电影在线观看完整版| 国产视频在线一区二区| 国外成人免费在线播放| 欧美日韩美女视频| 国产精品视频yy9099| 精品国产一区av| 久久琪琪电影院| 欧美在线观看www| 亚洲欧美在线第一页| 欧美激情成人在线视频| 日韩美女免费线视频| 精品国偷自产在线视频99| 自拍亚洲一区欧美另类| 欧美精品www| 亚洲成人av资源网| 日韩美女毛茸茸| 国产精品一久久香蕉国产线看观看| 久久av红桃一区二区小说| 91精品国产自产在线老师啪| 2023亚洲男人天堂| 国产69精品久久久久9| 久久青草精品视频免费观看| 欧美精品在线观看91| 国产精品91久久久| 国产精品自产拍在线观| 美日韩精品视频免费看| 日本精品久久久| 国产精品网址在线| 日韩激情av在线播放| 久久久久久国产精品三级玉女聊斋| y97精品国产97久久久久久| 亚洲精品中文字幕av| 国产欧美日韩中文字幕在线| 成人免费视频a| 欧美多人爱爱视频网站| 欧美中在线观看| 激情成人中文字幕| 日韩在线视频播放| 国产一级揄自揄精品视频| 国产精品美女视频网站| 岛国精品视频在线播放| 亚洲国产欧美自拍| 最近2019年日本中文免费字幕| 91色中文字幕| 91最新国产视频| 亚洲精品456在线播放狼人| 亚洲欧美一区二区三区四区| 国产成人自拍视频在线观看| 亚洲第一国产精品| 国产精品久久激情| 91chinesevideo永久地址| 国产亚洲在线播放| 国产精品一区av| 日韩精品免费电影| 欧美猛男性生活免费| xx视频.9999.com| 中文.日本.精品| 国产欧美最新羞羞视频在线观看| 国产精品久久久久久搜索| 亚洲精品国精品久久99热| 亚洲精品午夜精品| 国产精自产拍久久久久久蜜| 亚洲福利视频网| 亚洲免费影视第一页| 国产精品草莓在线免费观看| 777午夜精品福利在线观看| 大荫蒂欧美视频另类xxxx|