opencv로 특징 "선"(line_features)을 추출해 보았다.
배경
OpenCV에서 유화 효과는 한 줄로 거는 것입니다. (C++ 한정) 처럼
Tutorials for contrib modules(opencv-contrib-python) 에서 최근에 작성된 모듈에서 비교적 빨리 확인할 수 있을 것 같은 것을 찾아서 구현하려고 합니다.
이번에는
특징 "선"추출
입니다.
특징점을 검출하는 수법은 AKAZE
BRISK
KAZE
ORB
SIFT
SURF
개발. . . 했지만
Line Features Tutorial 에 있는 코드를 바탕으로 구현하려고 했습니다만,
cv::Ptr<cv::line_descriptor::LSDDetector> bd = cv::line_descriptor::LSDDetector::createLSDDetector();
에서 다음 오류가 발생했습니다.
Implementation has been removed due original code license issues in function 'LineSegmentDetectorImpl'
関数'LineSegmentDetectorImpl'内にあるオリジナルコードはライセンス問題が潜んでるため実装を削除したっす。
OpenCV에서 LineSegmentDetector (LSD)가 사라졌습니다. 이나 license problem in descriptor.hpp 을 보면 라이센스 문제로 4계에서 특징선을 추출하는 모듈이 삭제된 것 같습니다.
개발 (대체)
조사하면 createLSDDetector
대신 createFastLineDetector
를 사용할 수 있는 것 같습니다. 하지만 이미지를 비교하는 방법은 없습니다. 왜냐하면 detect
메소드에 DescriptorMatcher용의 출력 파라미터가 없기 때문입니다. LSDDetector
의 라이센스가 이후 프리가 되는지, FastLineDetector
전용의 비교 메소드가 나올 때까지 기다리거나, 각자로 최근 이웃 탐색당을 사용해 작성할 수 있을 것 같습니다.
( Descriptor Matchers 을 뭔가에서 사용하는 것일까 )
샘플 이미지는 또한 인스타에서 무작위로 선택되었습니다
htps //w w. Ins g et al. 이 m/p/B34P7로 BtSk/
원본 이미지
사용하는 라이브러리는 다음과 같습니다.
-lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ximgproc
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/ximgproc/fast_line_detector.hpp>
int main( int argc, char** argv )
{
//白黒画像(判定用)
cv::Mat imageMat = cv::imread("./eiffeltower.png", cv::IMREAD_GRAYSCALE );
//カラー画像(表示用)
cv::Mat imageMat_color = cv::imread("./eiffeltower.png", cv::IMREAD_COLOR );
std::vector<cv::Vec4f> lines;
//特徴線クラスオブジェクトを作成
cv::Ptr<cv::ximgproc::FastLineDetector> fld = cv::ximgproc::createFastLineDetector();
//特徴線検索
fld->detect( imageMat, lines);
for (int i = 0; i < lines.size(); ++i) {
//線の始点
cv::Point pt1 = cv::Point2f( lines[i][0], lines[i][1] );
//線の終点
cv::Point pt2 = cv::Point2f( lines[i][2], lines[i][3] );
cv::line( imageMat_color, pt1, pt2, cv::Scalar( 0, 0, 255 ), 2);
}
cv::namedWindow("line features", cv::WINDOW_AUTOSIZE);
cv::imshow("line features", imageMat_color);
cv::waitKey(0);
cv::destroyAllWindows();
}
결과
메소드내에서는 Canny
(세선화)를 이용하고 있다고 합니다만, 원 네타인 Outdoor Place Recognition in Urban Environments using Straight Lines 를 가치 읽지 않으면 모르겠습니다.
결론
createLSDDetector
를 사용하고 싶은 경우는 3계를 다운로드해 build 하면 사용할 수 있을지도 모릅니다만 환경을 정돈하는 것은 귀찮습니다. 이미지끼리의 비교입니다만 파라미터가 4개 밖에 없습니다만 최근 이웃 탐색으로 매칭할 수밖에 없을 것 같습니다. 공식 Doc에 있는데 Line Features Tutorial 을 사용할 수 없는 것이 진짜 잔디입니다. 이번에는 C++로 구현했지만 파이썬에서도 가능합니다. 시간이 있으면 추기합니다.
도움이 될 것 같은 링크
Line Features Tutorial 에 있는 코드를 바탕으로 구현하려고 했습니다만,
cv::Ptr<cv::line_descriptor::LSDDetector> bd = cv::line_descriptor::LSDDetector::createLSDDetector();
에서 다음 오류가 발생했습니다.
Implementation has been removed due original code license issues in function 'LineSegmentDetectorImpl'
関数'LineSegmentDetectorImpl'内にあるオリジナルコードはライセンス問題が潜んでるため実装を削除したっす。
OpenCV에서 LineSegmentDetector (LSD)가 사라졌습니다. 이나 license problem in descriptor.hpp 을 보면 라이센스 문제로 4계에서 특징선을 추출하는 모듈이 삭제된 것 같습니다.
개발 (대체)
조사하면 createLSDDetector
대신 createFastLineDetector
를 사용할 수 있는 것 같습니다. 하지만 이미지를 비교하는 방법은 없습니다. 왜냐하면 detect
메소드에 DescriptorMatcher용의 출력 파라미터가 없기 때문입니다. LSDDetector
의 라이센스가 이후 프리가 되는지, FastLineDetector
전용의 비교 메소드가 나올 때까지 기다리거나, 각자로 최근 이웃 탐색당을 사용해 작성할 수 있을 것 같습니다.
( Descriptor Matchers 을 뭔가에서 사용하는 것일까 )
샘플 이미지는 또한 인스타에서 무작위로 선택되었습니다
htps //w w. Ins g et al. 이 m/p/B34P7로 BtSk/
원본 이미지
사용하는 라이브러리는 다음과 같습니다.
-lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ximgproc
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/ximgproc/fast_line_detector.hpp>
int main( int argc, char** argv )
{
//白黒画像(判定用)
cv::Mat imageMat = cv::imread("./eiffeltower.png", cv::IMREAD_GRAYSCALE );
//カラー画像(表示用)
cv::Mat imageMat_color = cv::imread("./eiffeltower.png", cv::IMREAD_COLOR );
std::vector<cv::Vec4f> lines;
//特徴線クラスオブジェクトを作成
cv::Ptr<cv::ximgproc::FastLineDetector> fld = cv::ximgproc::createFastLineDetector();
//特徴線検索
fld->detect( imageMat, lines);
for (int i = 0; i < lines.size(); ++i) {
//線の始点
cv::Point pt1 = cv::Point2f( lines[i][0], lines[i][1] );
//線の終点
cv::Point pt2 = cv::Point2f( lines[i][2], lines[i][3] );
cv::line( imageMat_color, pt1, pt2, cv::Scalar( 0, 0, 255 ), 2);
}
cv::namedWindow("line features", cv::WINDOW_AUTOSIZE);
cv::imshow("line features", imageMat_color);
cv::waitKey(0);
cv::destroyAllWindows();
}
결과
메소드내에서는 Canny
(세선화)를 이용하고 있다고 합니다만, 원 네타인 Outdoor Place Recognition in Urban Environments using Straight Lines 를 가치 읽지 않으면 모르겠습니다.
결론
createLSDDetector
를 사용하고 싶은 경우는 3계를 다운로드해 build 하면 사용할 수 있을지도 모릅니다만 환경을 정돈하는 것은 귀찮습니다. 이미지끼리의 비교입니다만 파라미터가 4개 밖에 없습니다만 최근 이웃 탐색으로 매칭할 수밖에 없을 것 같습니다. 공식 Doc에 있는데 Line Features Tutorial 을 사용할 수 없는 것이 진짜 잔디입니다. 이번에는 C++로 구현했지만 파이썬에서도 가능합니다. 시간이 있으면 추기합니다.
도움이 될 것 같은 링크
-lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ximgproc
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/ximgproc/fast_line_detector.hpp>
int main( int argc, char** argv )
{
//白黒画像(判定用)
cv::Mat imageMat = cv::imread("./eiffeltower.png", cv::IMREAD_GRAYSCALE );
//カラー画像(表示用)
cv::Mat imageMat_color = cv::imread("./eiffeltower.png", cv::IMREAD_COLOR );
std::vector<cv::Vec4f> lines;
//特徴線クラスオブジェクトを作成
cv::Ptr<cv::ximgproc::FastLineDetector> fld = cv::ximgproc::createFastLineDetector();
//特徴線検索
fld->detect( imageMat, lines);
for (int i = 0; i < lines.size(); ++i) {
//線の始点
cv::Point pt1 = cv::Point2f( lines[i][0], lines[i][1] );
//線の終点
cv::Point pt2 = cv::Point2f( lines[i][2], lines[i][3] );
cv::line( imageMat_color, pt1, pt2, cv::Scalar( 0, 0, 255 ), 2);
}
cv::namedWindow("line features", cv::WINDOW_AUTOSIZE);
cv::imshow("line features", imageMat_color);
cv::waitKey(0);
cv::destroyAllWindows();
}
메소드내에서는
Canny
(세선화)를 이용하고 있다고 합니다만, 원 네타인 Outdoor Place Recognition in Urban Environments using Straight Lines 를 가치 읽지 않으면 모르겠습니다. 결론
createLSDDetector
를 사용하고 싶은 경우는 3계를 다운로드해 build 하면 사용할 수 있을지도 모릅니다만 환경을 정돈하는 것은 귀찮습니다. 이미지끼리의 비교입니다만 파라미터가 4개 밖에 없습니다만 최근 이웃 탐색으로 매칭할 수밖에 없을 것 같습니다. 공식 Doc에 있는데 Line Features Tutorial 을 사용할 수 없는 것이 진짜 잔디입니다. 이번에는 C++로 구현했지만 파이썬에서도 가능합니다. 시간이 있으면 추기합니다.
도움이 될 것 같은 링크
Reference
이 문제에 관하여(opencv로 특징 "선"(line_features)을 추출해 보았다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/satsukiya/items/8f09232da7b7f8b56ba7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)