0

GPUImage で動作する基本的なフィルターを取得しようとしていますが、コーナーを検出するときに、ライブ ビデオ フィード上に十字線を表示するように適切に設定する方法がわかりません。ビデオと一緒にブレンドフィルターに十字線を追加してから、それをgpuimageviewに追加しようとしましたが、白い画面しか表示されません。何か案は?

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.



    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;


    GPUImageView *filteredVideoView = (GPUImageView *)self.view;


    GPUImageCrosshairGenerator *crosshairGenerator = [[GPUImageCrosshairGenerator alloc] init];
    crosshairGenerator.crosshairWidth = 15.0;
    [crosshairGenerator forceProcessingAtSize:CGSizeMake(480.0, 640.0)];


    customFilter = [[GPUImageHarrisCornerDetectionFilter alloc] init];
    [customFilter setCornersDetectedBlock:^(GLfloat* cornerArray, NSUInteger cornersDetected, CMTime frameTime){
        [crosshairGenerator renderCrosshairsFromArray:cornerArray count:cornersDetected frameTime:frameTime];
        NSLog(@"corners: %u", cornersDetected);
    }];


    GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
    [blendFilter forceProcessingAtSize:CGSizeMake(480.0, 640.0)];

    [videoCamera addTarget:blendFilter];
    [crosshairGenerator addTarget:blendFilter];
    [blendFilter addTarget:filteredVideoView];


    [videoCamera startCameraCapture];

}
4

1 に答える 1

0

これは、 Swift 2.0でのコードのあり方です。

var liveCam:GPUImageVideoCamera!
var edgesDetector:GPUImageHarrisCornerDetectionFilter!
var crosshairGenerator:GPUImageCrosshairGenerator!
@IBOutlet weak var camView: GPUImageView!

override func viewDidLoad() {
    super.viewDidLoad()
    liveCam = GPUImageVideoCamera(sessionPreset: AVCaptureSessionPreset640x480, cameraPosition: .Back)
    liveCam.outputImageOrientation = .Portrait

    crosshairGenerator = GPUImageCrosshairGenerator()
    crosshairGenerator.crosshairWidth = 15
    crosshairGenerator.forceProcessingAtSize(CGSize(width: 480, height: 640))


    edgesDetector = GPUImageHarrisCornerDetectionFilter()
    edgesDetector.blurRadiusInPixels = 2 //Default value
    edgesDetector.threshold = 0.2 //Default value

    edgesDetector.cornersDetectedBlock = {(cornerArray:UnsafeMutablePointer<GLfloat>,cornersDetected:UInt,frameTime:CMTime) -> Void in
        self.crosshairGenerator.renderCrosshairsFromArray(cornerArray, count: cornersDetected, frameTime: frameTime)
        print("\(cornerArray) =-= \(cornersDetected) =-= \(frameTime)")

    }


    liveCam.addTarget(edgesDetector)
    edgesDetector.addTarget(crosshairGenerator)
    crosshairGenerator.addTarget(camView)

    liveCam.startCameraCapture()
}

結果 :

ここに画像の説明を入力

于 2015-12-09T15:37:40.203 に答える