vins-mobile程式碼解析1:viewDidLoad
阿新 • • 發佈:2018-12-13
重要物件和結構說明:
- CvVideoCamera* videoCamera:opencv提供的一個讀取相機資料並轉成cv::Mat格式的介面
- BOOL isCapturing:初始化好後,這個狀態變數設定為true,processImage開始處理影象
- cv::Ptr<FeatureTracker> feature_tracker:FeatureTracker負責光流跟蹤特徵,詳見vins相關的文件
- cv::Size frameSize:像機輸出的影象大小
- uint64_t prevTime;
- NSCondition *_condition;
- NSThread *mainLoop:迴圈呼叫process
- NSThread *draw:視覺化執行緒
- NSThread *saveData:把img和IMU存到documents資料夾
- NSThread *loop_thread
- NSThread *globalLoopThread
-
UIImageView* imageView
-
UIImageView* featureImageView
-
struct IMU_MSG
-
struct IMG_MSG
-
struct IMG_DATA
-
struct IMG_DATA_CACHE
-
struct VINS_DATA_CACHE
入口函式:ViewController.mm的viewDidLoad
- 初始化成員變數:CvVideoCamera* videoCamera
- 生成CvVideoCamera物件需要提供一個預覽控制元件
-
@property (nonatomic, strong) IBOutlet UIImageView* imageView;
-
- self.videoCamera.delegate = self
- 設定delegate
- delegate物件需要繼承CvVideoCameraDelegate
- delegate物件需要實現processImage函式,用於回撥收到的影象
- 還可以設定一些其他的相機屬性,具體參照CvAbstractCamera的定義
- 一些高階的屬性需要獲取device來設定,比如曝光時間等。
- AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; [device lockForConfiguration:&error]; [device setExposureTargetBias:ev completionHandler:^(CMTime syncTime) {}]; device.exposureMode = AVCaptureExposureModeCustom; [device unlockForConfiguration];
-
最後呼叫start函式開始接受影象
- 生成CvVideoCamera物件需要提供一個預覽控制元件
-
對imageView設定各種手勢
-
UIPanGestureRecognizer *resultPanGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; [self.imageView addGestureRecognizer:resultPanGestureRecognizer];
-
handlePan是回撥函式
-
-
feature_tracker = new FeatureTracke
-
設定UIActivityIndicatorView *indicator,就是開頭那個初始化指引相關的
-
初始化幾個執行緒
-
檢查裝置
-
判斷不同ios裝置設定不同的相機內參和imu相機變換
-