【发布时间】:2016-08-23 14:53:57
【问题描述】:
我正在使用相机检测人脸的 OpenCV android 2.4.11 示例下工作。 我没有在找到的脸上画一个矩形,而是试图在脸上放一个面具(png图像)。 但是为了在脸上显示图像,png 图像带有黑色背景,并且有透明度。
FdActivity.java
public void onCameraViewStarted(int width, int height) {
mGray = new Mat();
mRgba = new Mat();
//Load my mask png
Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.mask_1);
mask = new Mat();
Utils.bitmapToMat(image, mask);
}
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
mGray = inputFrame.gray();
if (mAbsoluteFaceSize == 0) {
int height = mGray.rows();
if (Math.round(height * mRelativeFaceSize) > 0) {
mAbsoluteFaceSize = Math.round(height * mRelativeFaceSize);
}
mNativeDetector.setMinFaceSize(mAbsoluteFaceSize);
}
MatOfRect faces = new MatOfRect();
if (mDetectorType == JAVA_DETECTOR) {
if (mJavaDetector != null)
mJavaDetector.detectMultiScale(mGray, faces, 1.1, 2, 2,
new Size(mAbsoluteFaceSize, mAbsoluteFaceSize), new Size());
}
else if (mDetectorType == NATIVE_DETECTOR) {
if (mNativeDetector != null)
mNativeDetector.detect(mGray, faces);
}
else {
Log.e(TAG, "Detection method is not selected!");
}
Rect[] facesArray = faces.toArray();
for (int i = 0; i < facesArray.length; i++) {
overlayImage(mRgba, mask, facesArray[i]);
}
return mRgba;
}
public Mat overlayImage(Mat background, Mat foregroundMask, Rect faceRect)
{
Mat mask = new Mat();
Imgproc.resize(this.mask, mask, faceRect.size());
Mat source = new Mat();
Imgproc.resize(foregroundMask, source, background.size());
mask.copyTo( background.submat( new Rect((int) faceRect.tl().x, (int) faceRect.tl().y, mask.cols(), mask.rows())) );
source.release();
mask.release();
return background;
}
【问题讨论】:
-
正在询问如何alpha blend with opencv? (见最后的解释,并将这两行移植到 java)。
-
我检查了你的代码,结果是那个带有阿尔法效果的黑色背景的 PNG。也就是说,png显然是被这个黑色背景充电的,但原始图像是没有背景的!
-
@DanMašek,感谢您的回复,但我尝试了这种媒体,但我做不到。如果 png 图像变得完全透明,只留下可见的图像轮廓。需要去除原本透明的黑色区域... 无论 alpha 值、beta 和 gamma 组合,结果都不是预期的... Core.addWeighted(mRgba.submat(eyeArea), 1, maskEye, 1, 1、mRgba.submat(eyeArea));
-
嘿@VTR2015 你有没有从 DanMašek 对 Java 的回答中移植 python 代码?可以分享一下吗?
-
我认为这个帖子有一个更简单的解决方案:stackoverflow.com/questions/47248053/…
标签: android python opencv camera