Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementation has been removed due to original code license issues #4

Open
akkitech opened this issue Apr 17, 2019 · 12 comments
Open

Comments

@akkitech
Copy link

I am receiving below error while executing python scan.py --images imageDirectory

Traceback (most recent call last):
File "scan.py", line 335, in
scanner.scan(im_dir + '/' + im)
File "scan.py", line 284, in scan
screenCnt = self.get_contour(rescaled_image)
File "scan.py", line 198, in get_contour
test_corners = self.get_corners(edged)
File "scan.py", line 95, in get_corners
lsd = cv2.createLineSegmentDetector()
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\lsd.cpp:143: error: (-213:The function/feature is not implemented) Implementation has been removed due original code license issues in function 'cv::LineSegmentDetectorImpl::LineSegmentDetectorImpl'

Python version : 3.7.3
OpenCV version : 4.1.0

Is there any workaround for this issue?

Thanks.

@AchuThanFinstreet
Copy link

I got the same issue. Some solution here?

@AchuThanFinstreet
Copy link

After uninstalling current opencv-version and reinstalling old one (3.1.0.0) it works now without this error.

@tangjie77wd
Copy link

I got the same issue even if i choosed 'OPENCV_ENABLE_NONFEE' ! Someone told me his solution----re-run CMAKE with WITH_WIN32UI, since you are on Windows, and eventually with WITH_QT.

@barabanus
Copy link

barabanus commented May 13, 2019

It looks like LSD detector had been removed completely from the source tree since 4.1.0 release (see opencv/opencv@3ba49cc) =(

@tangjie77wd
Copy link

tangjie77wd commented May 14, 2019

@akkitech @AchuThanFinstreet @barabanus I have solved my problem with the following solution :
#include <opencv2/ximgproc.hpp>
#include <opencv2/line_descriptor/descriptor.hpp>
using namespace cv::ximgproc;
{
...
vector lines;
Ptr<cv::ximgproc::FastLineDetector> detector = cv::ximgproc::createFastLineDetector();
detector->detect(roi, lines);
}
I have test it succeessfully.BTW,LSD detector has not been removed from opencv 4.10 but removed to cv::ximgproc from cv !

@barabanus
Copy link

barabanus commented May 14, 2019

Thanks, @tangjie77wd, but it seems like it was removed completely from OpenCV 4.1.0 (see opencv/opencv@3ba49cc). I have found LSD line detector classes within contrib line_descriptor module, but if you try to call real detect() method the program will be terminated with "unimplemented" error. You use FastLineDetector, but it's not LSD: it's based on Canny edges detector (see http://vision.ucsd.edu/~jwlim/files/icra14linerec.pdf)

@tangjie77wd
Copy link

tangjie77wd commented May 17, 2019

@barabanus Opencv shows an example https://docs.opencv.org/4.1.0/d1/d9e/fld_lines_8cpp-example.html which supports both LSD and FastLineDetector.How could they draw lines in the example if they did not imcomplete LSD ?
`// Because of some CPU's power strategy, it seems that the first running of
// an algorithm takes much longer. So here we run both of the algorithmes 10
// times to see each algorithm's processing time with sufficiently warmed-up
// CPU performance.
for(int run_count = 0; run_count < 10; run_count++) {
lines_lsd.clear();
int64 start_lsd = getTickCount();
lsd->detect(image, lines_lsd);
// Detect the lines with LSD
double freq = getTickFrequency();
double duration_ms_lsd = double(getTickCount() - start_lsd) * 1000 / freq;
std::cout << "Elapsed time for LSD: " << duration_ms_lsd << " ms." << std::endl;

    lines_fld.clear();
    int64 start = getTickCount();
    // Detect the lines with FLD
    fld->detect(image, lines_fld);
    double duration_ms = double(getTickCount() - start) * 1000 / freq;
    std::cout << "Ealpsed time for FLD " << duration_ms << " ms." << std::endl;
}
// Show found lines with LSD
Mat line_image_lsd(image);
lsd->drawSegments(line_image_lsd, lines_lsd);
imshow("LSD result", line_image_lsd);

// Show found lines with FLD
Mat line_image_fld(image);
fld->drawSegments(line_image_fld, lines_fld);
imshow("FLD result", line_image_fld);

`
Well ,I will try once i am free. Maybe we can not use LSD but FLD in the future.

@nyamba
Copy link

nyamba commented Jun 11, 2019

After uninstalling current opencv-version and reinstalling old one (3.1.0.0) it works now without this error.

this is works to me. thanks!

@frohro
Copy link

frohro commented Sep 2, 2019

Same issue here on Ubuntu 19.04.

@maky-hnou
Copy link

maky-hnou commented Oct 16, 2019

I had the same issue with opencv-contrib-python==4.1.1.26 and opencv-python==4.1.1.26.
The solutions I ended to are:

  • Downgrade to opencv-contrib-python==4.0.0.21 and opencv-python==4.0.0.21.

  • According to this question on Stakoverflow, to replace the missing LineSegmentDetectorImpl, install pylsd using pip install pylsd. For more details about how to use it with opencv, please check the documentation.

@Tsypaev
Copy link

Tsypaev commented Oct 31, 2019

It work with opencv-python version 4.1.1.26 too.

@jeanchristopheruel
Copy link

jeanchristopheruel commented May 9, 2020

I suggest you all add a thumbs-up to this issue!
"Restore LineSegmentDetector LSD & avoid license conflict": #2524

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants