在OpenCV java中声明Mat

Kev*_*ler 7 java opencv

如何使用Java OpenCV创建和分配Mat?这个页面的C++版本是

Mat C = (Mat_<double>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
Run Code Online (Sandbox Code Playgroud)

Java OpenCV中的等价物是什么?似乎缺乏Java OpenCV的文档.存在的内容通常包含在Java中不起作用的C++代码.

Kir*_*ran 14

是.文档很少或不存在.相当于

Mat img = new Mat( 3, 3, CvType.CV_64FC1 );
int row = 0, col = 0;
img.put(row ,col, 0, -1, 0, -1, 5, -1, 0, -1, 0 );
Run Code Online (Sandbox Code Playgroud)

在opencv java doc(1)中Mat,请参阅重载put方法

public int put(int row, int col, double... data )
public int put(int row, int col, float[] data )
public int put(int row, int col, int[] data )
public int put(int row, int col, short[] data )
public int put(int row, int col, byte[] data )
Run Code Online (Sandbox Code Playgroud)

我们可以看到,对于除了之外的数据类型double,最后一个参数是一个数组而不是可变参数类型.因此,如果选择创建Mat不同类型,我们将需要使用如下的数组

int row = 0, col = 0;
int data[] = {  0, -1, 0, -1, 5, -1, 0, -1, 0 };
//allocate Mat before calling put
Mat img = new Mat( 3, 3, CvType.CV_32S );
img.put( row, col, data );
Run Code Online (Sandbox Code Playgroud)