마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android opencv hough transform 질문있습니다..

0 추천

Android4opencv를 이용해서 지금 차선 검출을 하고 있는데 

opencv에서 있는 기존 카메라 받아오는 소스를 수정하여서

Gray변환, Sobel edge, HoughTransform 순으로 진행하려고 했는데요....

Sobel까지는 휴대폰으로 잘 되는 것을 확인했는데 HoughTransform이 전혀 안되네요...

실행하면 초록색화면이 뜨고 아무것도 안됩니다....

방법쫌알려주세요.... 머가 잘못됐는지라도 ㅠㅠㅠ

   	Mat rgba = inputFrame.rgba();
        Mat gray = new Mat();// = inputFrame.gray();
        Size sizeRgba = rgba.size();     
        
        int rows = (int) sizeRgba.height;
        int cols = (int) sizeRgba.width;
        int left = cols;
        int top = rows;
        int width = 0;
        int height = 1*rows/4;
       
        Mat rgbaWindow = rgba.submat(height, top, width, left);
        Imgproc.cvtColor(rgbaWindow, gray, Imgproc.COLOR_RGB2GRAY);
        Mat sobel = new Mat();
        Mat hough = new Mat();
        
        double[] data = new double[2];
        double rho = .0, theta = .0;
        Point pt1 = new Point();
        Point pt2 = new Point();
        double a = .0, b = .0;
        double x0 = .0, y0 = .0;
      
        
        Imgproc.Sobel(gray, sobel, CvType.CV_8U, 1, 0);
        
        Imgproc.HoughLines(sobel, hough, 1, Math.PI/180.0, 100, 100, 100);
        
        for(int i = 0; i < hough.cols(); i++)
        {
        	data = hough.get(0, i);
        	rho = data[0];
        	theta = data[1];
        	a = Math.cos(theta);
        	b = Math.sin(theta);
        	x0 = a * rho;
        	y0 = b * rho;
        	
      		if((theta*180.0/Math.PI > 130.0) && (theta*180.0/Math.PI < 150.0 ))
    		{
    		    pt1.x = Math.round(x0 + 1000*(-b));
    		    pt1.y = Math.round(y0 + 1000*a);
    		    pt2.x = Math.round(x0 - 1000*(-b));
    		    pt2.y = Math.round(y0 - 1000 *a);
    		    Core.line(mIntermediateMat, pt1, pt2, new Scalar(0, 0, 255), 3, 8 , 0);      
      		}
    		else if((theta*180.0/Math.PI > 40.0) && (theta*180.0/Math.PI < 60.0 ))
    		{
    		    pt1.x = Math.round(x0 + 1000*(-b));
    		    pt1.y = Math.round(y0 + 1000*a);
    		    pt2.x = Math.round(x0 - 1000*(-b));
    		    pt2.y = Math.round(y0 - 1000 *a);
    		    Core.line(mIntermediateMat, pt1, pt2, new Scalar(0, 255, 0), 3, 8 , 0);      
      		}
        }
        
       // mIntermediateMat = hough.clone();
       // Core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 10, 0);
        Imgproc.cvtColor(mIntermediateMat, rgbaWindow, Imgproc.COLOR_GRAY2BGRA, 4);
        
        gray.release();
        rgbaWindow.release();
        sobel.release();
        hough.release();

        return rgba;

 

익명사용자 님이 2013년 11월 30일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...