OpenCV Java inpaint图像格式要求

时间:2013-10-12 06:54:18

标签: java android opencv

一直试图在Android上修复工作,

int height = (int) viewMat.size().height;
int width = (int) viewMat.size().width;

Mat maskMat = new Mat();
maskMat.create(viewMat.size(), CvType.CV_8U);
maskMat.setTo(bColor);

Point r1 = new Point(width/2-width/10, height/2-height/10);
Point r2 = new Point(width/2+width/10, height/2+height/10);
Scalar color = new Scalar(1);

Core.rectangle(maskMat, r1, r2, color, Core.FILLED);

outMat.create(viewMat.size(), CvType.CV_8UC3);

viewMat.convertTo(outMat, CvType.CV_8UC3);

Photo.inpaint(outMat, maskMat, outMat, 1, Photo.INPAINT_TELEA);

受到了欢迎,

Caused by: CvException [org.opencv.core.CvException: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/photo/src/inpaint.cpp:744: 
error: (-210) Only 8-bit 1-channel and 3-channel input/output images are supported in function void cvInpaint(const CvArr*, const CvArr*, CvArr*, double, int)

在logcat中。

一直试图以各种方式创建Mats,但无效。

CV_8U =每通道8位,1通道。正确?

CV_8UC3 =每通道8位,3个通道。正确?

那我错过了什么?我完全被难过了。

1 个答案:

答案 0 :(得分:1)

...
Point r2 = new Point(width/2+width/10, height/2+height/10);
Scalar color = new Scalar(1);

Core.rectangle(maskMat, r1, r2, color, Core.FILLED);

Imgproc.cvtColor(viewMat, outMat, Imgproc.COLOR_RGBA2RGB);

Photo.inpaint(outMat, maskMat, outMat, 1, Photo.INPAINT_TELEA);
...

原来这只是通过颜色转换摆脱alpha通道的问题。