如何在opencv中将矩形放置在相机框架的中心

Fay*_*007 1 android opencv

我以这种方式采用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之间的参考坐标系变化)

用文字解释很难,所以我为你画了一张照片:) 在此输入图像描述