【发布时间】:2014-04-21 17:12:48
【问题描述】:
我正在尝试从相机 API 中获取数据并进行颜色后处理。我的问题是,虽然我可以将 byte[] 对象转换为 Mat 对象,但我无法在没有收到错误的情况下获取颜色通道。我从以下帖子开始:How to get the Mat object from the Byte[] in openCV android? 但该实现不起作用。
以下是相关代码:
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// The camera preview was automatically stopped. Start it again.
mCamera.startPreview();
mCamera.setPreviewCallback(this);
// Write the image in a file (in jpeg format)
File pictureFile_interp = getOutputMediaFile(MEDIA_TYPE_IMAGE);
try {
//Now try to convert and save.
Parameters params = camera.getParameters();
Size sz = params.getPictureSize();
//ERROR IN THE LINE BELOW!!!!
Mat raw = new Mat(sz.height,sz.width,CvType.CV_8UC4);
raw.put(0, 0, data);
Mat targ = Highgui.imdecode(raw, 0);
orig = new Mat();
Imgproc.cvtColor(targ, orig, Imgproc.COLOR_GRAY2RGB);
//Imgproc.cvtColor(targ, fixed, Imgproc.COLOR_BGR2RGB);
//now we have the target we want...let's interpolate.
interp = interpExperiment(orig,interpBy);
Highgui.imwrite(pictureFile_interp.toString(), interp);
} finally{
}
}
当我尝试该代码时,我得到一个异常:
Provided data element number should be multiple of the Mat channels count (3)
我将有问题的行替换为
Mat raw = new Mat(sz.height,sz.width,CvType.CV_8U);
raw.put(0, 0, data);
Mat targ = Highgui.imdecode(raw, 0);
我可以获得灰度图像。我做错了什么
Mat raw = new Mat(sz.height,sz.width,CvType.CV_8UC3);
?我已经查看了很多解决此问题的 stackoverflow 帖子,但没有一个适用于颜色矩阵。非常感谢任何帮助。
【问题讨论】:
-
异常发生在 raw.put(0,0,data);行