2015-12-05 41 views
0

這是色塊檢測示例的the ColorBlobDetectionActivity class,以及我在本課程實現的onTouch方法中,我正在面對的難以理解的特定代碼塊是第114行到第135行。這段代碼在OpenCV4Android示例應用程序中做了什麼?

onTouch方法被調用時,即當用戶觸摸一個彩色斑點時,計算出int rows= mRgba.rows()int cols = mRgba.cols()。由於mRgba是由onCameraFrame()返回的Mat,這意味着它表示一個攝像機幀。因此,我認爲rowscols現在表示沿着x軸的像素數量以及沿着幀的y軸的像素數量。

由於框架是相機所看到的區域(在此應用程序中是設備的全屏),因此rowscols分別表示屏幕沿着x軸和y軸的像素數。

接下來的兩個語句是:

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

的問題是:

  1. 究竟是什麼xOffsetyOffset代表什麼?

  2. mOpenCvCameraViewCameraBridgeViewBase一個實例,該實例 根據documentation負責 實現攝像機和OpenCV的相互作用的基本類。上getWidth()getHeight()documentation是沉默的,但 我認爲這也是相機框架的寬度和高度(以像素爲單位 ?),所以它應該是相同rowscols。那 是否正確?

  3. 你能解釋一下他們用來計算 xOffsetyOffset(在上述兩個statemnets)的公式?

回答

1

交付的框架和表面大小不一定相同。 event.getX的最大值等於表面寬度。

我還沒有看到該程序正在運行,但它看起來像偏移量決定了觸摸矩形的大小。矩形用於平均顏色,而不是簡單地顯示單個像素的數據。

+0

當相機視圖是全屏時(參見[第70行])(https://github.com/nehiljain/opencv4android/blob/master/samples/color-blob-detection/src/org/opencv/samples/colorblobdetect /ColorBlobDetectionActivity.java)),傳遞的幀應該等於屏幕的尺寸,或者我不清楚「Frame」這個詞,但是根據定義#5 [這裏](http://searchnetworking.techtarget.com) /定義/幀)「,一幀是發送給顯示圖像渲染設備的圖像。」 – Solace