我需要将下面的代码从C ++转换为Java。在C ++中我使用openCV,我需要使用JavaCV在Java中进行转换。
IplImage* img = cvLoadImage(argv[0]);
int rows = img->height;
int cols = img->width;
Mat matimg(img);
vector<vector<double> > img_vec(rows, vector<double>(cols));
for (int i=0; i < rows; i++) {
for (int j =0; j < cols; j++){
unsigned char temp;
temp = ((uchar*) matimg.data + i * matimg.step)[j * matimg.elemSize() + 1 ];
img_vec[i][j] = (double) temp;
}
}
我尝试过以下转换为java,但它无法正常工作。我打印了temp的值,它一直是0,对于相同的行为,matimg.step和matimg.elemSize()的值在C ++代码和Java代码中是不同的。 在c ++中,我得到matimg.step = 2400和matimg.elemSize()= 3而在Java中我得到3000和1。
以下是java中的代码:
IplImage img = cvLoadImage(argv[0]);
int rows = img.height();
int cols = img.width();
CvMat matimg = img.asCvMat();
double img_vec[][] = new double[rows][cols];
for (int i=0; i < rows; i++) {
for (int j =0; j < cols; j++){
short temp;
temp = matimg.data_s().get(i * matimg.step() + j * matimg.elemSize() + 1);
img_vec[i][j] = (double) temp;
}
}
我不明白我在哪里做错了? 任何帮助表示赞赏, 感谢。
答案 0 :(得分:3)
我用这个解决了我的问题:
ByteBuffer buffer = img.getByteBuffer();
double img_vec[][] = new double[rows][cols];
for (int i=0; i < rows; i++) {
for (int j =0; j < cols; j++){
int ind = i * img.widthStep() + j * img.nChannels() + 1;
img_vec[i][j] = (buffer.get(ind) & 0xFF);
}
}