我以这种方式采用mRGBA下的当前帧:
mRgba = inputFrame.rgba();
Run Code Online (Sandbox Code Playgroud)
然后创建一个矩形对象,它取当前相机框架的高度和宽度
rect = new Rect();
rect.width = mRgba.width();
rect.height = mRgba.height();
Run Code Online (Sandbox Code Playgroud)
它需要整个框架的空间,但当我试图收缩这个矩形时,它在一侧收缩(不是我需要的整体)
所以我试图找到矩形中心,然后尝试根据该中心和预定义的大小创建另一个矩形
int x = (int) (rect.tl().x + rect.br().x)/2;
int y = (int) (rect.tl().y + rect.br().y)/2;
Rect rect1 = new Rect(x,y,280,280);
Imgproc.rectangle(mRgba, rect1.tl(), rect1.br(), new Scalar(255, 0, 0), 2, 8, 0);
Run Code Online (Sandbox Code Playgroud)
但它不在中心!! 我不确定矩形对象采取的参数我没有找到opencv的文件非常有用.那么如何克服这种情况我希望矩形正好位于相机框架的中心.
小智 6
根据我的观察,下面的线实际上是在角(x,y)处创建一个宽度为280和高度为280的矩形.
Rect rect1 = new Rect(x,y,280,280);
width(280)
<------(x,y)
|
| height(280)
|
V
Run Code Online (Sandbox Code Playgroud)
所以,你对中心点的计算应该是正确的.
我希望下面的代码可以帮到你.
int width = 280;
int height = 280;
Rect rect1 = new Rect(x - width / 2, y - height / 2, width, height);
Run Code Online (Sandbox Code Playgroud)
编辑:
感谢Micka的提醒.我的上述概念不正确,尽管它有效.
Android相机默认为横向.通常,我们旋转图像90.(参考:Android - 相机预览是侧面的)
您的计算基于景观图像和openCV的坐标系统,该坐标系统与我们通常使用的坐标系统不同.(参考:OpenCV,OpenGL和Android Sensor之间的参考坐标系变化)
归档时间: |
|
查看次数: |
3242 次 |
最近记录: |