android:如何将int []转换为OpenCV Mat c ++?

时间:2016-10-25 18:47:40

标签: android c++ opencv

我试图在onPreviewFrame(byte [] rawData)返回的数组上使用openCV进行一些图像处理,我已经将字节数组转换为int数组。

我的问题是,如何将这个int数组转换成Iplimage或Mat? 将转换为新的Camera2有什么好处?

我试过这种方式来转换数组。

void ProcImage(int Width, int Height, int imageArray[]) {

cv::Mat mat = cv::Mat(Width, Height, CV_32SC1 , imageArray);
}

但mat.data包含的值为-14545898。 任何解决方案 提前谢谢

2 个答案:

答案 0 :(得分:0)

这很可能是由于您使用的Mat类型CV_32SC1。 您甚至不必转换int数组,并按原样使用字节数组

cv::Mat mat = new cv::Mat(Width, Height, CvType.CV_8UC3, byteArray);

其中byteArray是你的字节数组。

如果您仍想使用int数组,请尝试将类型更改为http://ninghang.blogspot.com/2012/11/list-of-mat-type-in-opencv.html

中指定的Mat: CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4之一

答案 1 :(得分:0)

直接在Java中你可以做这样的事情(它基于JavaCameraView的实现):

...
Mat frameData = new Mat(frameHeight + (frameHeight/2), frameWidth, CvType.CV_8UC1);

@Override
public void onPreviewFrame(byte[] frame, Camera arg1) {
    Log.d(TAG, "Preview Frame received. Frame size: " + frame.length);
    synchronized (this) {
        frameData.put(0, 0, frame);
        ...
        this.notify();
    }
}

public Mat getRgbaFrame() {
    Mat rgba = new Mat();
    Imgproc.cvtColor(frameData, rgba, Imgproc.COLOR_YUV2RGBA_NV21, 4);
    return mRgba;
}

public Mat getGrayFrame() {
    return frameData.submat(0, frameHeight, 0, frameWidth);
}