android:如何将 int[] 转换为 OpenCV Mat c++?
Posted
技术标签:
【中文标题】android:如何将 int[] 转换为 OpenCV Mat c++?【英文标题】:android: How to convert an int[] to an 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 这样的值。 任何解决方案? 提前致谢
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于android:如何将 int[] 转换为 OpenCV Mat c++?的主要内容,如果未能解决你的问题,请参考以下文章
android - 如何将 int 转换为字符串并将其放在 EditText 中?