반응형


허프변환에 대해 좀더 알고 싶으시면 아래 글을 참고하세요...

[그래픽스&컴퓨터비전/구현한 것들] - Hough Line Transform 구현





  1. #include <opencv2/core/mat.hpp>  
  2. #include <opencv2/imgcodecs.hpp>  
  3. #include <opencv2/imgproc.hpp>  
  4. #include <opencv2/highgui.hpp>  
  5.   
  6. using namespace cv;  
  7. using namespace std;  
  8.   
  9.   
  10. int main(int argc, char**argv )  
  11. {  
  12.     Mat img_original = imread("indoor1.jpg", IMREAD_COLOR );  
  13.     Mat img_edge, img_gray;  
  14.   
  15.   
  16.     //그레이 스케일 영상으로 변환 한후.  
  17.     cvtColor( img_original, img_gray, COLOR_BGR2GRAY);  
  18.     //캐니에지를 이용하여 에지 성분을 검출합니다.  
  19.     Canny( img_gray, img_edge, 30, 90, 3);  
  20.   
  21.   
  22.     //직선 성분을 검출합니다.  
  23.     vector<Vec4i> lines;  
  24.     HoughLinesP( img_edge, lines, 1, CV_PI/180,  30, 30, 3);  
  25.   
  26.     //검출한 직선을 영상에 그려줍니다.  
  27.     forint i=0; i<lines.size(); i++ )  
  28.     {  
  29.         Vec4i L = lines[i];  
  30.         line(img_original, Point(L[0],L[1]), Point(L[2],L[3]),  
  31.              Scalar(0,0,255), 1, LINE_AA );  
  32.     }  
  33.   
  34.   
  35.     cvNamedWindow("edge", WINDOW_AUTOSIZE );  
  36.     imshow( "edge", img_edge );  
  37.   
  38.     cvNamedWindow("result", WINDOW_AUTOSIZE );  
  39.     imshow( "result", img_original );  
  40.   
  41.     waitKey(0);  
  42. }  



Canny함수와 HoughLinesP 함수의 파라메타를 조정하여 복도 사진에서 직선 성분을 뽑아봤습니다.   수작업으로 제대로 나온 상태를 찾은 거라.. 실제로는 이런 결과가 안나올 수 있습니다.  똑같은 장소에서 촬영한 이미지라도 조명 상황에 따라 에지가 다르게 뽑힐 수 있어서요..




반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
개선 사항을 댓글로 남겨주면 가능한 빨리 반영하도록 하겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요 ^^

  1. Favicon of https://jys923.tistory.com BlogIcon 흰털너부리 2016.07.08 18:17 신고

    template<typename _Tp, int m, int n> inline
    Matx<_Tp, m, n>::Matx(const _Tp* values)
    {
    for( int i = 0; i < channels; i++ ) val[i] = values[i];
    }

    000000013F14243A mov eax,dword ptr [r8+rax*4]

    0x000000013F91243A에(Opencv 3.exe의) 처리되지 않은 예외가 있습니다. 0xC0000005: 0x00000000041E3000 위치를 읽는 동안 액세스 위반이 발생했습니다..

    그대로 붙여 넣고 파일이름만 바꾸었는데 이런 에러가 나네요.뭐가 잘못됀건지 도와주세요

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2016.07.08 18:23 신고

      윈도우환경에서 비주얼스튜디오를 이용하신다면 이미지를 소스폴더위치에 두셔야합니다.. 이미지를 못찾아서 나는 에러같습니다

  2. Favicon of https://jys923.tistory.com BlogIcon 흰털너부리 2016.07.08 18:30 신고

    빠른 답변감사합니다
    윈도우7 비주얼스튜디오2015 오픈cv 3.1(최신버전입니다.)
    /*for (int i = 0; i<lines.size(); i++)
    {
    Vec4i L = lines[i];
    line(img_original, Point(L[0], L[1]), Point(L[2], L[3]),
    Scalar(0, 0, 255), 1, LINE_AA);
    }*/

+ Recent posts