我在android中使用opencv。我已经为gradle android studio下载了最新的opencv sdk。 我导入了样本进行人脸检测并成功构建了它。它看起来像那样
它在脸部周围绘制绿色矩形。我想获得该矩形内的区域,使用位图将其替换为可绘制文件夹中的新图像。 我现在为实现目标而做的是
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, // TODO: objdetect.CV_HAAR_SCALE_IMAGE
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++)
Imgproc.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), FACE_RECT_COLOR, 3);
try {
resultBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.icon);
Utils.bitmapToMat(resultBitmap, mRgba);
}
catch(Exception e){
Log.e(TAG, "Length of resultBitmap" + resultBitmap.getByteCount());
resultBitmap.recycle();
resultBitmap=null;
}
return mRgba;
}
我到目前为止所做的是:我获取Mat对象,使用drawable文件夹中的图像创建位图,再次将该位图转换为Mat对象,然后返回该Mat对象。但不幸的是,这并没有显示任何东西。任何人都可以帮助我,我做错了。任何帮助将非常感激。谢谢:))