approxPolyDP()函數(shù)介紹
OpenCV中的approxPolyDP()
函數(shù)用于對形狀進行逼近,以減少多邊形的頂點數(shù),可以用于對圖像輪廓點進行多邊形擬合。
函數(shù)原型如下:
void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed );
其中,
curve
是輸入的點集,類型為InputArray,
可以是Mat
、vector<Point>
等;
approxCurve是輸出的點集,類型為OutputArray,
也是Mat
類型;
epsilon
是精度,類型為double;
closed
是一個布爾值,表示是否閉合多邊形。
使用場景
在計算機視覺和圖像處理中,approxPolyDP()
函數(shù)用于對圖像輪廓點可以進行多邊形擬合,用于檢測和識別形狀。
使用案例
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
// 讀取灰度圖像
Mat src = imread("./simple_chart.png");
if (src.empty())
{
cout << "無法讀取圖像" << endl;
return -1;
}
imshow("原圖", src);
waitKey(0);
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
imshow("灰度圖", gray);
waitKey(0);
// 二值化圖像
Mat binary;
threshold(gray, binary, 50, 255, THRESH_BINARY);
imshow("二值化圖", binary);
waitKey(0);
// 查找輪廓
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
cout << "發(fā)現(xiàn)輪廓的數(shù)量:" << contours.size() << endl;
// 繪制輪廓
for (size_t i = 0; i < contours.size(); ++i)
{
auto contour = contours[i];
vector<Point> approx;
approxPolyDP(contour, approx, arcLength(contour, true) * 0.02, true);
// 根據(jù)頂點數(shù)量判斷形狀
// 如果為4,則為矩形或者正方形
if (approx.size() == 4)
{
Rect rect = boundingRect(approx);
rectangle(src, rect, Scalar(255, 255, 255), 2);
// 判斷是不是正方形
if (((rect.width-rect.height)/(double) rect.height) <=0.02){
cout << "這是正方形" << endl;
}
}
// 如果為3,則為三角形
else if(approx.size()== 3){
drawContours(src, contours, i, Scalar(255, 255, 0), 2);
}
// 如果其他形狀,比如圓,復雜多邊形等
else{
drawContours(src, contours, i, Scalar(255, 0, 255), 2);
}
}
// 顯示結(jié)果
imshow("輪廓繪制", src);
waitKey(0);
return 0;
}
原圖:
?灰度圖:
二值化圖:
?輪廓圖:
文章來源:http://www.zghlxwxcb.cn/news/detail-839680.html
結(jié)論
在計算機視覺和圖像處理中,approxPolyDP()
函數(shù)用于對圖像輪廓點可以進行多邊形擬合,用于檢測和識別形狀。另外在圖像分割、目標跟蹤和機器人導航等領(lǐng)域,通過減少多邊形的頂點數(shù),可以提高算法的效率和準確性。文章來源地址http://www.zghlxwxcb.cn/news/detail-839680.html
到了這里,關(guān)于[C++] opencv - approxPolyDP(多邊形擬合)函數(shù)介紹和使用場景的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!