OpenCV如何在JAVA中使用2D数组初始化Mat

时间:2014-02-16 14:30:54

标签: opencv multidimensional-array mat

假设我有一个用值初始化的二维数组,如何将这个值放在OpenCV的Mat对象中?

5 个答案:

答案 0 :(得分:4)

可能这样的事情会起作用:

float trainingData[][] = new float[][]{ new float[]{501, 10}, new float[]{255, 10}, new float[]{501, 255}, new float[]{10, 501} };
Mat trainingDataMat = new Mat(4, 2, CvType.CV_32FC1);//HxW 4x2
for (int i=0;i<4;i++)
        trainingDataMat.put(i,0, trainingData[i]);

代码是不言自明的:您拥有&#34; TrainingData&#34;中的数据。数组,并分配新的Mat对象。然后你使用&#34; put&#34;把行推到位的方法。

答案 1 :(得分:2)

抱歉不了解Java,但可以提出一般逻辑。在C ++ openCV中,我们按2 for loops执行以下操作:

matObject.create( array.rows, array.cols, CV_8UC1 ); // 8-bit single channel image

for (int i=0; i<array.rows; i++)
{
    for(int j=0; j<array.cols; j++)
    {
         matObject.at<uchar>(i,j) = array[i][j];
    }
}

请告诉我这是否是您的查询..

答案 2 :(得分:0)

matObject是关键字还是意味着我们必须用Mat图像的名称替换? 例如,如果我将图像定义为:

Mat inputImage = imread(“C:\ Documents and Settings \ user \ My Documents \ My Pictures \ Images \ imageName.jpg”);

然后我应该输入inputImage而不是matObject吗?

答案 3 :(得分:0)

使用可以使用Mat的put方法。 代码

int[][] intArray = new int[][]{{2,3,4},{5,6,7},{8,9,10}};
Mat matObject = new Mat(3,3,CvType.CV_8UC1);
for(int row=0;row<3;row++){
   for(int col=0;col<3;col++)
        matObject.put(row, col, intArray[row][col]);
}

答案 4 :(得分:0)

用于

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    Mat array= Highgui.imread("java.png" ,CvType.CV_8UC1 );
    Mat matObject = new Mat();
    matObject.create( array.rows(), array.cols(),CvType.CV_8UC1 );

    for (int i=0; i<array.rows(); i++)
    {

        for(int j=0; j<array.cols(); j++)
        {

           matObject.put(i, j, array.get(i, j));

        }
    }

    Highgui.imwrite("java2.jpg", matObject);