android 获取视频流,摄像头旋转后,获取人脸坐标不准确,如何解决?

山城忙碌人 山城忙碌人 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
一:问题描述
在做摄像头开发时,需要检测人脸,在人脸四周,画一个边框,当摄像头未做旋转时,不会有任何问题,当摄像头旋转90度(或270度),获取到的人脸坐标就不准确,代码如下:

PointF pointF = new PointF();
face.getMidPoint(pointF);

二:出现问题的图片



这是摄像头未作旋转时的流,我是手机横着测试的。




这是摄像头旋转90度是的流,我手机是竖着测试的

三:xml布局

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
//摄像头流预览视图
<com.test.MyCameraPreview
android:id="@+id/cameraPreview"
android:layout_width="300dp"
android:layout_height="300dp">
</com.test.MyCameraPreview>

//画人脸边框的视图
<ImageView
android:id="@+id/drawImageView"
android:src="@drawable/xz_new"
android:layout_width="300dp"
android:layout_height="300dp"
android:scaleType="matrix"
android:visibility="visible" />
</RelativeLayout>


代码获取流宽度和高度是(640,480),已将摄像头预览视图,画人脸边框视图,宽高动态设置为(640,480),画人脸边框代码如下:

tempBitmap = Bitmap.createBitmap(640,480,
Bitmap.Config.ARGB_8888);
canvas = new Canvas(tempBitmap);

PointF pointF = new PointF();
face.getMidPoint(pointF);//得到人脸中心点坐标
float eyesDistance = face.eyesDistance();//两眼之前的距离
float index = eyesDistance*2;
int left =(int)(pointF.x-index);
int top = (int)((pointF.y- index));
int right=(int)((pointF.x+ index));
int bottom=(int)((pointF.y+ index));
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
canvas.drawRect(left,top,right,bottom,paint);
imageView.post(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(tempBitmap);
}
});

由于摄像头旋转90度,我偿试将画人脸边框的imageView,旋转90度,还是不行,代码如下:

imageView.setPivotX(imageView.getWidth()/2);
imageView.setPivotY(imageView.getHeight()/2);//支点在图片中心
imageView.setRotation(90);



请问各位大神,如何解决这个问题,如觉得问题未描述清楚,麻烦留言,感谢大家了。
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
山城忙碌人
Android 80,489 成员 91,375 内容