【问题标题】:android: How to convert an int[] to an OpenCV Mat c++?android:如何将 int[] 转换为 OpenCV Mat c++?
【发布时间】:2016-10-25 18:47:39
【问题描述】:

我尝试使用 openCV 对从 onPreviewFrame(byte[] rawData) 返回的数组进行一些图像处理,我已将字节数组转换为 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 这样的值。 任何解决方案? 提前致谢

【问题讨论】:

    标签: android c++ opencv


    【解决方案1】:

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

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

    byteArray 是您的字节数组。

    如果您仍想使用 int 数组尝试将类型更改为 Mat: CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4 之一,如 http://ninghang.blogspot.com/2012/11/list-of-mat-type-in-opencv.html 中指定的那样

    【讨论】:

      【解决方案2】:

      直接在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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-05
        • 1970-01-01
        • 2022-06-25
        • 2019-06-19
        • 2019-06-22
        • 2017-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多