2013-10-29 4 views
4

Android에서 OpenCV를 처음 사용했습니다. C++ 코드를 Java로 변환하려고합니다. 나는 내가 계속할 수없는 어떤 지점에 갇혀있다. 내가 혼란 해요 TODOVec4i를 Java로 변환 openCV

MatOfInt4 lines= new MatOfInt4(); 
Imgproc.HoughLinesP(bw, lines, 1, Math.PI/180, 70, 30, 10); 

int[] lineArray = lines.toArray(); 
// Expand the lines 
//TODO 


for (int i = 0; i < lineArray.length; i++) 
    { 
     int v = lineArray[i]; 
     lines.[i][0] = 0; 
     lines[i][1] = ((float)v[1] - v[3])/(v[0] - v[2]) * -v[0] + v[1]; 
     lines[i][2] = src.cols(); 
     lines[i][3] = ((float)v[1] - v[3])/(v[0] - v[2]) * (src.cols() - v[2]) + v[3]; 
    } 

개까지 .. 변환

std::vector<cv::Vec4i> lines; 
cv::HoughLinesP(bw, lines, 1, CV_PI/180, 70, 30, 10); 

    // Expand the lines 
    for (int i = 0; i < lines.size(); i++) 
    { 
     cv::Vec4i v = lines[i]; 
     lines[i][0] = 0; 
     lines[i][1] = ((float)v[1] - v[3])/(v[0] - v[2]) * -v[0] + v[1]; 
     lines[i][2] = src.cols; 
     lines[i][3] = ((float)v[1] - v[3])/(v[0] - v[2]) * (src.cols - v[2]) + v[3]; 
    } 

반 방법은 루프 내부입니다. 배열로 변환 된 행은 int 배열을 제공합니다. 그러나 for 루프 내부에는 v가 다시 정의되고 배열이어야합니다. 나는이 점을 이해하지 못했다. 아무도이 문제를 해결할 수 있도록 도와주세요. 미리 감사드립니다.

+0

나는 이것을 구현했다. 하지만 결과 매트에 선이 없습니다. ~ –

답변

11

마지막으로 작업 코드를 작성했습니다. this link

Mat lines = new Mat(); 
    int threshold = 70; 
    int minLineSize = 30; 
    int lineGap = 10; 

    Imgproc.HoughLinesP(thresholdImage, lines, 1, Math.PI/180, threshold, 
      minLineSize, lineGap); 

    for (int x = 0; x < lines.cols(); x++) { 

     double[] vec = lines.get(0, x); 
     double[] val = new double[4]; 

     val[0] = 0; 
     val[1] = ((float) vec[1] - vec[3])/(vec[0] - vec[2]) * -vec[0] + vec[1]; 
     val[2] = src.cols(); 
     val[3] = ((float) vec[1] - vec[3])/(vec[0] - vec[2]) * (src.cols() - vec[2]) + vec[3]; 

     lines.put(0, x, val); 

    } 
+0

완벽하게 안내하십시오!. thanks – TharakaNirmana

+0

@ssdehero 제발 thresholdImage와 src 필드를 정의 할 수 있습니까? –

+0

@ssdehero 이것을 구현했습니다. 하지만 결과 매트에 선이 없습니다. 제발 가이드 –