【问题标题】:OpenCV How to initialize Mat with 2D array in JAVAOpenCV如何在JAVA中用二维数组初始化Mat
【发布时间】:2023-04-01 06:46:01
【问题描述】:

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

【问题讨论】:

    标签: opencv multidimensional-array mat


    【解决方案1】:

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

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

    代码是不言自明的:您在“TrainingData”数组中有数据,并且您分配了新的 Mat 对象。然后使用“put”方法将行推入到位。

    【讨论】:

      【解决方案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];
          }
      }
      

      如果是您的问题,请告诉我..

      【讨论】:

      • matObject.at 的替代方法是什么(i,j) = array[i][j];在 JAVA 中?我什么都找不到。
      • 对不起,我不知道 java...但这只是一种访问位置 (i,j) 像素的方法,这是图像处理中的基本内容,所以应该非常非常简单的。在matObject.at&lt;uchar&gt;(i,j) = array[i][j]; 中,我们只是在(i,j) 访问图像的像素并在该位置放置一个值。 PS:不要忘记进行正确的类型转换。如果数组中存储的值是整数类型,那么matObject.at&lt;uchar&gt;(i,j) = (uchar)array[i][j];
      • 非常感谢您的帮助.. :)
      【解决方案3】:

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

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

      那我应该用 inputImage 代替 matObject 吗?

      【讨论】:

        【解决方案4】:

        为此可以使用 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]);
        }
        

        【讨论】:

          【解决方案5】:

          用于

              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);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-12-08
            • 1970-01-01
            • 2016-09-01
            • 2018-12-09
            • 2013-12-15
            • 2013-11-21
            • 2011-04-12
            相关资源
            最近更新 更多