以下是颜色blob检测示例的the ColorBlobDetectionActivity
class,而我在理解上遇到困难的特定代码块是此类中实现的onTouch
方法中的第114行到第135行
当调用onTouch
方法时,即当用户触摸彩色blob时,会计算int rows= mRgba.rows()
和int cols = mRgba.cols()
。由于mRgba
是由Mat
返回的onCameraFrame()
,因此它表示它代表相机框架。所以我认为rows
和cols
现在代表了沿x轴的像素和沿帧的y轴的像素。
由于相框是相机查看的区域(在此应用中是设备的全屏),因此rows
和cols
表示沿x轴和y的像素数分别是屏幕的轴。
接下来的两个陈述是:
int xOffset = (mOpenCvCameraView.getWidth() - cols) / 2;
int yOffset = (mOpenCvCameraView.getHeight() - rows) / 2;
问题是:
xOffset
和yOffset
究竟代表什么?
mOpenCvCameraView
是CameraBridgeViewBase
的一个实例
根据{{3}}是一个负责的基本类
实现Camera和OpenCV的交互。该
getWidth()
和getHeight()
上的documentation是沉默的,但是
我认为它也是相机框架的宽度和高度(in
像素?),因此它应与rows
和cols
相同。就是它
正确的吗?
你能解释一下他们用来计算的公式吗?
xOffset
和yOffset
(在上述两个状态网中)?
答案 0 :(得分:1)
交付的框架和表面尺寸不一定相同。 event.getX的最大值等于表面宽度。
我还没有看到程序正在运行,但似乎偏移确定了触摸的rect的大小。 rect用于平均颜色,而不是简单地显示单个像素的数据。