[英]How to sampling the contour's sequence
我使用opencv sobel濾鏡查找圖像的輪廓。
現在,我想對輪廓序列進行采樣,例如{(0,1),(2,2),(3,4)...}。
我需要可以自動分離每條曲線的算法。
opencv中是否有任何算法,或者我必須自己做?
我只認為通過深度優先搜索來掃描圖像並記錄白點的簡單方法,但我認為它的性能不好。
findContours
什么問題?
給定一個邊緣圖像, findContours
的目的是為您提供兩個結構列表,其中一個列表為您提供每個輪廓的像素坐標,而另一個列表為您提供屬於每個檢測到的輪廓的各種相關信息。
在C ++中,它很簡單,如下所示。 假設您的圖像存儲在cv::Mat
結構中,您將執行以下操作:
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
Mat edge_output; // Declare edge image
// ...
// ...
// Perform sobel detector on image and store in edge_output
// ...
//
// Declare a vector of Points and a vector to store the hierarchy
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
// Find contours
findContours(edge_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_NONE);
hierarchy
包含有關圖像拓撲的信息。 您可以閱讀此頁面,了解有關層次結構的詳細信息: http : //docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_contours/py_contours_hierarchy/py_contours_hierarchy.html
但是,您要關注的是contours
。 這將是一個包含點向量的向量。 contours
每個元素都會為您提供一個Point
結構列表,這些結構包含特定輪廓的(x,y)
坐標。 CV_RETR_TREE
為您提供每個輪廓的完整信息,而CV_CHAIN_APPROX_NONE
為您提供沿輪廓的所有可能點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.