2013-10-29 70 views
4

我是Android中的OpenCV新手。我試圖將C++代碼轉換成Java。我被困在某些我無法繼續的地步。將Vec4i轉換成Java openCV

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]; 
    } 

半路上我轉換..高達的TODO

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]; 
    } 

,我很困惑裏面的for循環。當將行轉換爲數組時,它會給出一個int數組。但是在for循環中又定義了哪個應該是一個數組。我沒有明白這一點。任何人都可以幫助我解決這個問題。先謝謝你。

+0

我已經實現了這個。但我無法在合成的Mat上找到任何線條。請指導 - –

回答

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

完美!謝謝 – TharakaNirmana

+0

@ssdehero請你可以定義什麼是thresholdImage和src字段? –

+0

@ssdehero我已經實現了這一點。但我無法在合成的Mat上找到任何線條。請指導 –