2012-05-17 104 views
4

我有一个IplImage,我在矩阵中转换,现在我想逐个单元格迭代。如何迭代JavaCV中的cvMat矩阵?

CvMat mtx = new CvMat(iplUltima); 
for (int i = 0; i < 100; i++) { 
    //I need something like mtx[0][i] = someValue; 
} 
+0

这可能会帮助您:http://stackoverflow.com/questions/9920449/converting-opencv-matrix-looping-to-javacv –

+0

谢谢!但是在这个例子中迭代了一个FloatBuffer而不是CvMat。 Wath是否需要为矩阵位置赋值? – gal007

回答

3

我干了!我分享:

CvMat mtx = new CvMat(iplUltima); 

for (int i = 0; i < 100; i++) { 
    for (int j = 0; j < 100; j++) { 
     opencv_core.cvSet2D(mtx, i, j, CvScalar.ONE); 
    } 
} 
iplUltima = new IplImage (mtx); 

其中i =行和j =列

+0

请告诉如何将其更改为CvScalar.RED或其他意味着0-255。我这样做,但没有改变成绿色或红色任何颜色我想要的 – GPrathap

+0

嗨!抱歉!我再也没有回到这个技术的程序,所以我不记得太多。不过,我记得一本好书:http://books.google.com.ar/books?id=seAgiOfu2EIC&pg=PA209&lpg=PA209&dq=cvSet2D+opencv&source=bl&ots=hTE6bmeCMi&sig=Y8BwgDQOmtzcOuTLga2S0mkDFak&hl=es-419&sa=X&ei=zbdwVL-WHMKkgwT35YOIDQ&ved= 0CFMQ6AEwBg#v = onepage&q = cvSet2D%20opencv&f = false – gal007

+0

谢谢,我会弄明白 – GPrathap

-1

我没有安装Java,我无法检查此解决方案,但我认为它应该可以正常工作。

CvMat mtx = new CvMat(iplUltima); 
val n  = mtx.rows * mtx.cols * mtx.channels 

for (i <- 0 until n) { 
    // Put your pixel value, for example 200 
    mtx.put(i, 200) 
} 

Here是关于javaCV中像素访问的参考。

+0

谢谢@Innuendo!但它没有奏效。我会在几分钟后发布答案,我做到了! – gal007

1

首先,你需要导入从JavaCV如下:

进口com.googlecode.javacv.cpp.opencv_core.CvMat ;

import static com.googlecode.javacv.cpp.opencv_core.CV_32F;

主要课程:

int rows = 2; 
int cols = 2; 

CvMat Tab = CvMat.create(rows, cols, CV_32F); 

// Manually fill the table 
Tab.put(0, 0, 1); 
Tab.put(0, 1, 2); 
Tab.put(1, 0, -3); 
Tab.put(1, 1, 4); 

// Iterate through its elements and print them 
for(int i=0;i<rows;i++){ 
    for (int j =0;j<cols;j++){ 
    System.out.print(" "+ Tab.get(i,j)); 
    } 
    System.out.println("\n"); 
}