計算機視覺討論群162501053
收入囊中
葵花寶典
關於輪廓提取,幾乎相同是乙個連通域的推斷。
原理還是比較簡單的。
初識api
c++:void
findcontours
(inputoutputarrayimage, outputarrayofarrayscontours, outputarrayhierarchy, intmode, intmethod, pointoffset=point()
)c++:void
findcontours
(inputoutputarrayimage, outputarrayofarrayscontours, intmode, intmethod, pointoffset=point()
)method–
.也就是說,不論什麼輪廓上的兩個點都處在乙個九宮格內.
[tehchin89]
offset– 可選的輪廓位移.當分析roi比較實用.
找到輪廓後。就能夠用
drawcontours畫出來
#include "cv.h"我們能夠用矩形包圍輪廓#include "highgui.h"
using
namespacecv;
intmain
(int
argc
,char
**ar**
)namedwindow
("components",1
);imshow
("components"
,dst
);waitkey(0
);}
cv::rect r0= cv::boundingrect(cv::mat(contours[0]));
cv::rectangle(result,r0,cv::scalar(0),2);
也能夠用圓
float radius;
cv::point2f center;
cv::minenclosingcircle(cv::mat(contours[1]),center,radius);
cv::circle(result,cv::point(center),static_cast(radius),cv::scalar(0),2);
也能夠用多邊形
也能夠用還有一種多邊形模擬convex hull
std::vectorhull;
cv::convexhull(cv::mat(contours[3]),hull);
也能夠用最小外接矩形
vectorminrect( contours.size() );
for( int i = 0; i < contours.size(); i++ )
也能夠用橢圓
vectorminellipse( contours.size() );
for( int i = 0; i < contours.size(); i++ )
if( contours[i].size() > 5 )
minellipse[i] = fitellipse( mat(contours[i]) );
還有非常多好用的函式
cv::contourarea
預計乙個輪廓的畫素數
cv::pointpolygontest
確定乙個點是在輪廓內韓式輪廓外
cv::matchshapes度量
兩個輪廓的相似度
還有cv::moments用於計算重心等資訊
荷槍實彈
參考1-輪廓提取
參考2-convexhull逼近
參考3-圓與矩形逼近
參考4-最小外接矩形與橢圓逼近
演算法馬拉松24
n 1個點的多邊形。給外圈的邊標記上1 n,裡圈的邊也標記上1 n,使得對於乙個外圈相鄰點與中間點構成的三角形的邊權之和都相等。n le 10 6 顯然每個三角形權值和為 frac 一開始簡化成n個數排乙個環,相鄰兩個數的和不相等並且有上下界,然後並不好做 構造了一下n 5發現外圈正好1.5,內圈1...
2013騰訊程式設計馬拉松初賽(3月24日)
1 題目一 小q系列故事 最佳裁判 這道題就是找最大值和最小值的題目,學過c的應該都沒問題的。2 題目二 小明系列問題 小明序列 這道題目是最長上公升子串行的一種變形吧,就是子串行中相鄰數的下標之差必須大於d 開始看錯題目,以為是相鄰數之差大於d,結果wa了好多次,最後看了別人的discuss才恍然...
opencv2 學習第12天 複習
include include include using namespace cv using namespace std int g slider position 0 int n 0 cvcapture g cap nullptr void ontrackbarslide int pos vo...