Iphone 带角点检测的GPUImage叠加实时视频

Iphone 带角点检测的GPUImage叠加实时视频,iphone,ios,gpuimage,Iphone,Ios,Gpuimage,尝试使用GPUImage获得一个基本过滤器,但不确定如何正确设置它,以便在检测角点时在实时视频提要上显示十字光标。我尝试将十字光标与视频一起添加到混合过滤器,然后将其添加到gpuimageview,但我得到的只是一个白色屏幕。有什么想法吗 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. videoCam

尝试使用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];

}

这就是您的代码在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()
}
var-liveCam:GPUImageVideoCamera!
var edgesDetector:GPUImageHarrisCornerDetectionFilter!
var crosshairGenerator:GPUImageCrosshairGenerator!
@IBVAR camView:GPUImageView!
重写func viewDidLoad(){
super.viewDidLoad()
liveCam=GPUImageVideoCamera(会话预设:AVCaptureSessionPreset640x480,cameraPosition:.Back)
liveCam.outputImageOrientation=.Portrait
crosshairGenerator=GPUImageCrosshairGenerator()
crosshairGenerator.crosshairWidth=15
crosshairGenerator.forceProcessingAtSize(CGSize(宽:480,高:640))
edgesDetector=gpuimageriscornerDetectionFilter()
edgesDetector.blurRadiusInPixels=2//默认值
edgesDetector.threshold=0.2//默认值
edgesDetector.cornersDetectedBlock={(cornerArray:UnsafemtablePointer,cornersDetected:UInt,frameTime:CMTime)->中的Void
self.crosshairGenerator.renderCrosshairsFromArray(cornerArray,计数:cornersDetected,帧时:帧时)
打印(“\(角落数组)=-=\(角落检测)=-=\(帧时间)”)
}
liveCam.addTarget(edgesDetector)
edgesDetector.addTarget(十字线生成器)
crosshairGenerator.addTarget(camView)
liveCam.startCameraCapture()
}
结果是:


为什么不在GPUImageView之外添加十字线?就像使用另一个视图的覆盖一样?我的意思是在ViewController的视图中的GPUImageView顶部设置一个CAShapeLayer,并在其上绘制十字线。除非我遗漏了您试图实现的其他目标,否则这是非常简单的。我可能遗漏了它,但您何时将
customFilter
添加为
videoCamera
的目标?就目前的情况来看,看起来你并没有将帧送入角探测器。@BradLarson看起来就是这样。不确定如何正确添加所有内容