-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdstpatternfinder.cpp
41 lines (33 loc) · 1.21 KB
/
dstpatternfinder.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "dstpatternfinder.h"
dstPatternFinder::dstPatternFinder(const cv::Mat &binaryImg)
{
binaryImg.copyTo(m_img);
}
bool dstPatternFinder::getCorners(std::vector<cv::Point> &cornerPoints)
{
//提取轮廓
std::vector<std::vector<cv::Point>> contours;
cv::findContours(m_img, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
if(contours.size() != 1)
return false;
//多边形拟合
std::vector<cv::Point> approx_points;
cv::approxPolyDP(*contours.begin(), approx_points, 5, 1);
//test
/*cv::Mat findContoursTestImg(m_img.size(), CV_8UC3, cv::Scalar(255,255,255));
cv::drawContours(findContoursTestImg, contours, -1, cv::Scalar(255));
cv::imshow("findContoursTestImg",findContoursTestImg);
cv::Mat approxTestImg;
findContoursTestImg.copyTo(approxTestImg);
int order = 0;
for(auto c : approx_points)
{
cv::circle(approxTestImg, c, 5, cv::Scalar(25,230,30));
cv::putText(approxTestImg, std::to_string(order++), c, 1, 1, cv::Scalar(30,30,250), 1);
}
cv::imshow("approxTestImg",approxTestImg);
cv::waitKey();*/
//返回
cornerPoints.assign(approx_points.begin(),approx_points.end());
return true;
}