99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

OpenCV iOS-視頻處理

2018-08-28 10:51 更新

本教程介紹如何使用iPhone的攝像頭和OpenCV處理視頻幀。

先決條件:

  • Xcode 4.3或更高版本
  • iOS編程基礎知識(Objective-C,Interface Builder)

在您的iOS項目中包含OpenCV庫

OpenCV庫作為一個所謂的框架,可以直接拖放到您的XCode項目中。從http://sourceforge.net/projects/opencvlibrary/files/opencv-ios/下載最新的二進制文件。或者按照本指南安裝在iOS中手動編譯框架。一旦有了框架,只需將其拖放到XCode中即可:

OpenCV iOS-視頻處理

此外,您必須找到用于項目中所有頭文件的前綴標題。該文件通常位于“ProjectName / Supporting Files / ProjectName-Prefix.pch”。在那里,您添加了一個include語句來導入opencv庫。但是,在包含UIKit和Foundation之前,請確保包含opencv,因為否則您會收到一些奇怪的編譯錯誤,一些宏如min和max被多次定義。例如,前綴頭可能如下所示:

//
// Prefix header for all source files of the 'VideoFilters' target in the 'VideoFilters' project
//
#import <Availability.h>
#ifndef __IPHONE_4_0
#warning "This project uses features only available in iOS SDK 4.0 and later."
#endif
#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif
#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

示例視頻幀處理項目

用戶界面

首先,我們創(chuàng)建一個簡單的iOS項目,例如單視圖應用程序。然后,我們創(chuàng)建并添加UIImageView和UIButton來啟動相機并顯示視頻幀。故事板可能是這樣的:

OpenCV iOS-視頻處理

確保將IBOutlets和IBActions添加并連接到相應的ViewController:

@interface ViewController : UIViewController
{
    IBOutlet UIImageView* imageView;
    IBOutlet UIButton* button;
}
- (IBAction)actionStart:(id)sender;
@end

Adding the Camera

我們將視頻控制器添加到攝像機控制器,并在視圖加載時對其進行初始化:

#import <opencv2/videoio/cap_ios.h>
using namespace cv;
@interface ViewController : UIViewController
{
    ...
    CvVideoCamera* videoCamera;
}
...
@property (nonatomic, retain) CvVideoCamera* videoCamera;
@end
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.videoCamera = [[CvVideoCamera alloc] initWithParentView:imageView];
    self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront;
    self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset352x288;
    self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
    self.videoCamera.defaultFPS = 30;
    self.videoCamera.grayscale = NO;
}

在這種情況下,我們初始化相機并提供imageView作為渲染每個幀的目標。CvVideoCamera基本上是圍繞AVFoundation的包裝,所以我們將AVGoundation攝像機的一些選項作為屬性。例如,我們要使用前置攝像頭,將視頻尺寸設置為352x288和視頻方向(視頻攝像機通常以橫向模式輸出,當您設計肖像應用程序時會導致轉置的數據)。

屬性defaultFPS設置相機的FPS。如果處理速度比所需的FPS快,幀將自動丟棄。

屬性灰度= YES導致不同的顏色空間,即“YUV(YpCbCr 4:2:0)”,而灰度=否則將輸出32位BGRA。

另外,我們必須手動添加opencv框架的框架依賴關系。最后,您應該至少在您的項目中有以下框架:

  • opencv2
  • 加速
  • AssetsLibrary
  • AVFoundation
  • CoreGraphics中
  • CoreImage
  • CoreMedia
  • corevideo的
  • QuartzCore
  • UIKit的
  • 基礎

OpenCV iOS-視頻處理

處理框架

我們遵循在iOS中非常常見的授權模式,以提供對每個相機框架的訪問?;旧希晥D控制器必須實現CvVideoCameraDelegate協議,并且必須設置為攝像機的委托:

@interface ViewController:UIViewController <CvVideoCameraDelegate>
 - (void)viewDidLoad
{
    ...
    self.videoCamera = [[CvVideoCamera alloc] initWithParentView:imageView];
    self.videoCamera.delegate = self;
    ...
}
#pragma mark - Protocol CvVideoCameraDelegate
#ifdef __cplusplus
- (void)processImage:(Mat&)image;
{
    // Do some OpenCV stuff with the image
}
#endif

請注意,我們在這里使用C ++(cv :: Mat)。重要:您必須將視圖控制器的擴展名.m重命名為.mm,以便編譯器在Objective-C ++(Objective-C和C ++混合)的假設下編譯它。然后,當編譯器正在處理C ++代碼的文件時,__cplusplus被定義。因此,我們將代碼放在__cplusplus定義的塊中。

基本視頻處理

從這里你可以開始處理視頻幀。例如,以下代碼段顏色會反轉圖像:

- (void)processImage:(Mat&)image;
{
    // Do some OpenCV stuff with the image
    Mat image_copy;
    cvtColor(image, image_copy, COLOR_BGR2GRAY);
    // invert image
    bitwise_not(image_copy, image_copy);
    //Convert BGR to BGRA (three channel to four channel)
    Mat bgr;
    cvtColor(image_copy, bgr, COLOR_GRAY2BGR);
    cvtColor(bgr, image, COLOR_BGR2BGRA);
}

開始!

最后,我們必須告訴相機實際上開始/停止工作。假設您正確連接了UI,按下按鈕,以下代碼將啟動相機:

#pragma mark - UI Actions
- (IBAction)actionStart:(id)sender;
{
    [self.videoCamera start];
}

提示

盡量避免昂貴的矩陣復制操作,特別是如果您正在實時瞄準。當圖像數據作為參考傳遞時,如果可能,就可以就地工作。

當您使用灰度數據時,請將灰度設置為YES,因為YUV色彩空間可讓您直接訪問亮度平面。

Accelerate框架提供了一些CPU加速DSP濾波器,在您的情況下可以方便使用。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號