【发布时间】:2023-04-01 06:46:01
【问题描述】:
假设,我有一个用值初始化的二维数组,如何将这个值放入 OpenCV 中的 Mat 对象中?
【问题讨论】:
标签: opencv multidimensional-array mat
假设,我有一个用值初始化的二维数组,如何将这个值放入 OpenCV 中的 Mat 对象中?
【问题讨论】:
标签: opencv multidimensional-array mat
可能这样的事情会起作用:
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”方法将行推入到位。
【讨论】:
抱歉,不了解 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<uchar>(i,j) = array[i][j]; 中,我们只是在(i,j) 访问图像的像素并在该位置放置一个值。 PS:不要忘记进行正确的类型转换。如果数组中存储的值是整数类型,那么matObject.at<uchar>(i,j) = (uchar)array[i][j];
matObject 是关键字还是意味着我们必须替换为 Mat 图像的名称? 例如,如果我将图像定义为:
Mat inputImage = imread("C:\Documents and Settings\user\My Documents\My Pictures\Images\imageName.jpg");
那我应该用 inputImage 代替 matObject 吗?
【讨论】:
为此可以使用 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]);
}
【讨论】:
用于
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);
【讨论】: