Added a sample to show usage of the class.
This commit is contained in:
parent
e51e00ac5f
commit
6bd5e12be3
@ -899,7 +899,7 @@ public:
|
||||
* @param lines2 The second lines that need to be drawn. Color - Red.
|
||||
* @return The number of mismatching pixels between lines1 and lines2.
|
||||
*/
|
||||
static int compareSegments(cv::Size& size, const std::vector<cv::Vec4i>& lines1, const std::vector<cv::Vec4i> lines2, cv::Mat* image = 0);
|
||||
static int compareSegments(const cv::Size& size, const std::vector<cv::Vec4i>& lines1, const std::vector<cv::Vec4i> lines2, cv::Mat* image = 0);
|
||||
|
||||
private:
|
||||
cv::Mat image;
|
||||
|
@ -957,13 +957,15 @@ void LSD::drawSegments(cv::Mat& image, const std::vector<cv::Vec4i>& lines)
|
||||
}
|
||||
}
|
||||
|
||||
int LSD::compareSegments(cv::Size& size, const std::vector<cv::Vec4i>& lines1, const std::vector<cv::Vec4i> lines2, cv::Mat* image)
|
||||
{
|
||||
if (image && image->size() != size) size = image->size();
|
||||
CV_Assert(size.area());
|
||||
|
||||
Mat_<uchar> I1 = Mat_<uchar>::zeros(size);
|
||||
Mat_<uchar> I2 = Mat_<uchar>::zeros(size);
|
||||
int LSD::compareSegments(const cv::Size& size, const std::vector<cv::Vec4i>& lines1, const std::vector<cv::Vec4i> lines2, cv::Mat* image)
|
||||
{
|
||||
Size sz = size;
|
||||
if (image && image->size() != size) sz = image->size();
|
||||
CV_Assert(sz.area());
|
||||
|
||||
Mat_<uchar> I1 = Mat_<uchar>::zeros(sz);
|
||||
Mat_<uchar> I2 = Mat_<uchar>::zeros(sz);
|
||||
|
||||
// Draw segments
|
||||
for(unsigned int i = 0; i < lines1.size(); ++i)
|
||||
|
50
samples/cpp/lsd_lines.cpp
Normal file
50
samples/cpp/lsd_lines.cpp
Normal file
@ -0,0 +1,50 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
#include "opencv2/core/core.hpp"
|
||||
#include "opencv2/imgproc/imgproc.hpp"
|
||||
#include "opencv2/highgui/highgui.hpp"
|
||||
|
||||
using namespace std;
|
||||
using namespace cv;
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
if (argc != 2)
|
||||
{
|
||||
std::cout << "lsd_lines [input image]" << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string in = argv[1];
|
||||
|
||||
Mat image = imread(in, CV_LOAD_IMAGE_GRAYSCALE);
|
||||
|
||||
// Create and LSD detector with std refinement.
|
||||
LSD lsd_std(LSD_REFINE_STD);
|
||||
double start = double(getTickCount());
|
||||
vector<Vec4i> lines_std;
|
||||
lsd_std.detect(image, lines_std);
|
||||
double duration_ms = (double(getTickCount()) - start) * 1000 / getTickFrequency();
|
||||
std::cout << "OpenCV STD (blue) - " << duration_ms << " ms." << std::endl;
|
||||
|
||||
// Create an LSD detector with no refinement applied.
|
||||
LSD lsd_none(LSD_REFINE_NONE);
|
||||
start = double(getTickCount());
|
||||
vector<Vec4i> lines_none;
|
||||
lsd_none.detect(image, lines_none);
|
||||
duration_ms = (double(getTickCount()) - start) * 1000 / getTickFrequency();
|
||||
std::cout << "OpenCV NONE (red)- " << duration_ms << " ms." << std::endl;
|
||||
std::cout << "Overlapping pixels are shown in purple." << std::endl;
|
||||
|
||||
Mat difference = Mat::zeros(image.size(), CV_8UC1);
|
||||
LSD::compareSegments(image.size(), lines_std, lines_none, &difference);
|
||||
imshow("Line difference", difference);
|
||||
|
||||
Mat drawnLines(image);
|
||||
LSD::drawSegments(drawnLines, lines_std);
|
||||
imshow("Standard refinement", drawnLines);
|
||||
|
||||
waitKey();
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user