这段代码在这个OpenCV4Android示例应用程序中做了什么?

时间:2015-12-05 15:27:17

标签: android opencv opencv3.0 opencv4android

以下是颜色blob检测示例的the ColorBlobDetectionActivity class,而我在理解上遇到困难的特定代码块是此类中实现的onTouch方法中的第114行到第135行

当调用onTouch方法时,即当用户触摸彩色blob时,会计算int rows= mRgba.rows()int cols = mRgba.cols()。由于mRgba是由Mat返回的onCameraFrame(),因此它表示它代表相机框架。所以我认为rowscols现在代表了沿x轴的像素和沿帧的y轴的像素。

由于相框是相机查看的区域(在此应用中是设备的全屏),因此rowscols表示沿x轴和y的像素数分别是屏幕的轴。

接下来的两个陈述是:

int xOffset = (mOpenCvCameraView.getWidth() - cols) / 2;
int yOffset = (mOpenCvCameraView.getHeight() - rows) / 2;

问题是:

  1. xOffsetyOffset究竟代表什么?

  2. mOpenCvCameraViewCameraBridgeViewBase的一个实例 根据{{​​3}}是一个负责的基本类 实现Camera和OpenCV的交互。该 getWidth()getHeight()上的documentation是沉默的,但是 我认为它也是相机框架的宽度和高度(in 像素?),因此它应与rowscols相同。就是它 正确的吗?

  3. 你能解释一下他们用来计算的公式吗? xOffsetyOffset(在上述两个状态网中)?

1 个答案:

答案 0 :(得分:1)

交付的框架和表面尺寸不一定相同。 event.getX的最大值等于表面宽度。

我还没有看到程序正在运行,但似乎偏移确定了触摸的rect的大小。 rect用于平均颜色,而不是简单地显示单个像素的数据。