21 #include <opencv2/core/core.hpp>
22 #include <opencv2/imgproc/imgproc.hpp>
90 std::vector<cv::Vec4i>::const_iterator it2=
lines.begin();
92 while (it2!=
lines.end()) {
94 cv::Point pt1((*it2)[0],(*it2)[1]);
95 cv::Point pt2((*it2)[2],(*it2)[3]);
97 cv::line( image, pt1, pt2, color);
108 const cv::Mat &orientations,
double percentage,
double delta) {
110 std::vector<cv::Vec4i>::iterator it=
lines.begin();
113 while (it!=
lines.end()) {
122 double ori1= atan2(static_cast<double>(y1-y2),static_cast<double>(x1-x2))+
PI/2;
123 if (ori1>
PI) ori1= ori1-2*
PI;
125 double ori2= atan2(static_cast<double>(y2-y1),static_cast<double>(x2-x1))+PI/2;
126 if (ori2>PI) ori2= ori2-2*
PI;
129 cv::LineIterator lit(orientations,cv::Point(x1,y1),cv::Point(x2,y2));
131 for(i = 0, count=0; i < lit.count; i++, ++lit) {
133 float ori= *(
reinterpret_cast<float *
>(*lit));
136 if (std::min(fabs(ori-ori1),fabs(ori-ori2))<delta)
141 double consistency= count/
static_cast<double>(i);
144 if (consistency < percentage) {
146 (*it)[0]=(*it)[1]=(*it)[2]=(*it)[3]=0;
161 std::vector<cv::Vec4i> vout;
163 for(uint i=0;i<ori.size();i++)
std::vector< cv::Vec4i > findLines(cv::Mat &binary)
void setAccResolution(double dRho, double dTheta)
void drawDetectedLines(cv::Mat &image, cv::Scalar color=cv::Scalar(255, 255, 255))
void setMinVote(int minv)
std::vector< cv::Vec4i > convert2Matlab(const std::vector< cv::Vec4i > &ori)
void setLineLengthAndGap(double length, double gap)
std::vector< cv::Vec4i > lines
std::vector< cv::Vec4i > removeLinesOfInconsistentOrientations(const cv::Mat &orientations, double percentage, double delta)