這是色塊檢測示例的the ColorBlobDetectionActivity
class,以及我在本課程實現的onTouch
方法中,我正在面對的難以理解的特定代碼塊是第114行到第135行。這段代碼在OpenCV4Android示例應用程序中做了什麼?
當onTouch
方法被調用時,即當用戶觸摸一個彩色斑點時,計算出int rows= mRgba.rows()
和int cols = mRgba.cols()
。由於mRgba
是由onCameraFrame()
返回的Mat
,這意味着它表示一個攝像機幀。因此,我認爲rows
和cols
現在表示沿着x軸的像素數量以及沿着幀的y軸的像素數量。
由於框架是相機所看到的區域(在此應用程序中是設備的全屏),因此rows
和cols
分別表示屏幕沿着x軸和y軸的像素數。
接下來的兩個語句是:
int xOffset = (mOpenCvCameraView.getWidth() - cols)/2;
int yOffset = (mOpenCvCameraView.getHeight() - rows)/2;
的問題是:
究竟是什麼
xOffset
和yOffset
代表什麼?mOpenCvCameraView
是CameraBridgeViewBase
一個實例,該實例 根據documentation負責 實現攝像機和OpenCV的相互作用的基本類。上getWidth()
和getHeight()
的 documentation是沉默的,但 我認爲這也是相機框架的寬度和高度(以像素爲單位 ?),所以它應該是相同rows
和cols
。那 是否正確?你能解釋一下他們用來計算
xOffset
和yOffset
(在上述兩個statemnets)的公式?
當相機視圖是全屏時(參見[第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