标签: gpuimage

GPUImage:混合两个图像

我正在使用GPUImage框架(一些旧版本)来混合两个图像(将边框叠加添加到某个图像).在我更新到最新的框架版本后,应用这样的混合后,我得到一个空的黑色图像.

我正在使用下一个方法:

- (void)addBorder {
    if (currentBorder != kBorderInitialValue) {
        GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
        GPUImagePicture *imageToProcess = [[GPUImagePicture alloc] initWithImage:self.imageToWorkWithView.image];
        GPUImagePicture *border = [[GPUImagePicture alloc] initWithImage:self.imageBorder];

        blendFilter.mix = 1.0f;
        [imageToProcess addTarget:blendFilter];
        [border addTarget:blendFilter];

        [imageToProcess processImage];
        self.imageToWorkWithView.image = [blendFilter imageFromCurrentlyProcessedOutput];

        [blendFilter release];
        [imageToProcess release];
        [border release];
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是什么?

iphone image-processing objective-c gpuimage

7
推荐指数
2
解决办法
9397
查看次数

iOS实时确定名片的角落

我想实现一个名片检测功能,如这个应用程序(https://scanbot.io).相机应该检测到一张名片并自动拍照(只有名片).

图像由绿线分隔

我的想法是使用BradLarson's GPUImage库,检测角落(使用Harris角点检测算法),计算获得角落的最大矩形并裁剪矩形内的图像.

这是我的代码:

 - (void)setupFilter {
    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];

    filter = [[GPUImageHarrisCornerDetectionFilter alloc] init];
    [(GPUImageHarrisCornerDetectionFilter *)filter setThreshold:0.01f];
    [(GPUImageHarrisCornerDetectionFilter *)filter setSensitivity:0.5f];
    [(GPUImageHarrisCornerDetectionFilter *)filter setBlurRadiusInPixels:2.0f];

    [videoCamera addTarget:filter];
    videoCamera.runBenchmark = YES;
    GPUImageView *filterview = [[GPUImageView alloc] init];
    self.view=filterview;

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

    [(GPUImageHarrisCornerDetectionFilter *)filter setCornersDetectedBlock:^(GLfloat* cornerArray, NSUInteger cornersDetected, CMTime frameTime) {
        [crosshairGenerator renderCrosshairsFromArray:cornerArray count:cornersDetected frameTime:frameTime];
    }];

    GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
    [blendFilter forceProcessingAtSize:CGSizeMake(480.0, 640.0)];
    GPUImageGammaFilter *gammaFilter …
Run Code Online (Sandbox Code Playgroud)

crop image-processing detection ios gpuimage

7
推荐指数
1
解决办法
4599
查看次数

Xcode:缺少NSCameraUsageDescription的Info.plist键

添加GPUImage到我的Xcode项目后,我的应用因缺少的Info.plist密钥而被拒绝NSCameraUsageDescription

Info.plist密钥丢失-该应用尝试访问对隐私敏感的数据,而没有使用说明。该应用程序Info.plist必须包含一个NSCameraUsageDescription带有字符串值的 键,该字符串值会向用户说明该应用程序如何使用此数据。

我以几种不同的方式将密钥和说明添加到了我的plist中,并且超过10个版本都遇到了相同的拒绝错误。

这是我的,info.plist带有底部的“相机使用情况”键。

我的info.plist的快照

当我在plist中明确定义了为什么仍然拒绝我的任何想法?

xcode ios gpuimage

7
推荐指数
7
解决办法
3万
查看次数

无法通过GPUImage播放录像机

我正在使用GPUImage库将视频录制到文件系统上的文件中.我把它保存为m4v文件.这是我正在使用的代码:

    NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:recordingDestination];
    unlink([pathToMovie UTF8String]);
    NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];

    movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(1280.0, 720.0)];
    [videoCameraFilter addTarget:movieWriter];

    movieWriter.shouldPassthroughAudio = YES;
    movieFile.audioEncodingTarget = movieWriter;
    [movieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter];

    [movieWriter startRecording];
    [movieFile startProcessing];

    [movieWriter setCompletionBlock:^{
        [videoCameraFilter removeTarget:movieWriter];
        [movieWriter finishRecording];
    }];
Run Code Online (Sandbox Code Playgroud)

这会记录一个m4v视频.然后我试着用它来玩MPMoviePlayerController:

    NSString *videoPath = [NSString stringWithFormat:@"%@/%@", [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"], [libraryFiles objectAtIndex:selectedCell]];
    NSLog(videoPath);
    NSURL *url=[[NSURL alloc] initWithString:videoPath];
    MPMoviePlayerController *moviePlayer=[[MPMoviePlayerController alloc] initWithContentURL:url];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDonePressed) name:MPMoviePlayerDidExitFullscreenNotification object:moviePlayer];

    moviePlayer.controlStyle=MPMovieControlStyleDefault;
    [moviePlayer play];
    [self.view …
Run Code Online (Sandbox Code Playgroud)

objective-c m4v ios gpuimage

6
推荐指数
1
解决办法
1755
查看次数

使用OpenGL的神秘应用程序崩溃

我正在使用GPUIImage库来开发iOS相机应用程序.有时,当应用程序在2-3分钟后暂停时,Xcode会在应用程序上发生崩溃,指向方法中的行:

- (void)presentBufferForDisplay;
{
    [self.context presentRenderbuffer:GL_RENDERBUFFER];
} 
Run Code Online (Sandbox Code Playgroud)

可能是这次崩溃的原因是什么?我有一个非常长的相机设置,代码本身就在GPUImageContext课堂上.我在这里做错了什么?

cocoa-touch opengl-es ios gpuimage

6
推荐指数
1
解决办法
3282
查看次数

Cocoapods复制资源上的Xcode构建失败

我最近在Xcode中将GPUImage添加到我的podfile中,如下所示:

pod 'GPUImage', '~> 0.1.4'
Run Code Online (Sandbox Code Playgroud)

我不认为我遇到的问题是GPUImage特有的,而是与GPUImage是我添加的唯一包含额外资源的pod有关.

我的构建因"Shell脚本调用错误,退出代码23"而失败.

./Pods/GPUImage/framework/Resources/lookup.png
./Pods/GPUImage/framework/Resources/lookup_amatorka.png
./Pods/GPUImage/framework/Resources/lookup_miss_etikate.png
./Pods/GPUImage/framework/Resources/lookup_soft_elegance_1.png
./Pods/GPUImage/framework/Resources/lookup_soft_elegance_2.png
building file list ... rsync: link_stat "/Pods/GPUImage/framework/Resources/lookup.png" failed: No such file or directory (2)
rsync: link_stat "/Pods/GPUImage/framework/Resources/lookup_amatorka.png" failed: No such file or directory (2)
rsync: link_stat "/Pods/GPUImage/framework/Resources/lookup_miss_etikate.png" failed: No such file or directory (2)
rsync: link_stat "/Pods/GPUImage/framework/Resources/lookup_soft_elegance_1.png" failed: No such file or directory (2)
rsync: link_stat "/Pods/GPUImage/framework/Resources/lookup_soft_elegance_2.png" failed: No such file or directory (2)
done
sent 29 bytes  received 20 bytes  98.00 bytes/sec
total size is 0  speedup …
Run Code Online (Sandbox Code Playgroud)

xcode cocoapods gpuimage

6
推荐指数
1
解决办法
5743
查看次数

将GPUImage过滤器子类移植到Swift

我正在尝试将应用程序从Objective-C移植到Swift,但我遇到了GPUImageFilter子类的问题.

在Obj-C中,继承GPUImageFilter并使用不同的片段着色器就像这样简单

- (id)init;
{
    NSString *fragmentShaderPathname = [[NSBundle mainBundle] pathForResource:@"TestShader" ofType:@"fsh"];
    NSString *fragmentShaderString = [NSString stringWithContentsOfFile:fragmentShaderPathname encoding:NSUTF8StringEncoding error:nil];

    if (!(self = [super initWithFragmentShaderFromString:fragmentShaderString]))
    {
        return nil;
    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何在Swift中做到这一点.这是我的新初始化程序:

override init() {
    let fragmentShaderPathname = NSBundle.mainBundle().pathForResource("TestShader", ofType: "fsh")!
    let fragmentShaderString = NSString(contentsOfFile: fragmentShaderPathname, encoding: NSUTF8StringEncoding, error: nil)

    super.init(fragmentShaderFromString: fragmentShaderString)
}
Run Code Online (Sandbox Code Playgroud)

一旦调用此应用程序,应用程序就会崩溃并显示以下错误消息: /Users/peterwunder/Documents/XCode/welp/welp/GPUImageTestFilter.swift: 12: 7: fatal error: use of unimplemented initializer 'init(vertexShaderFromString:fragmentShaderFromString:)' for class 'welp.GPUImageTestFilter'

我究竟做错了什么?

xcode objective-c ios gpuimage swift

6
推荐指数
1
解决办法
783
查看次数

AVFoundation中__copy_helper_block_崩溃

我的视频处理应用程序中发生了一次奇怪的崩溃.它用于AVFoundation处理视频和音频以及GPUImage过滤.我自己从未遇到过这个问题,但在将它发布到App Store之后,它经常出现在Crashlytics中.这是崩溃的日志:

Thread : Crashed: AVPlayerItemOutput queue
0  libobjc.A.dylib                0x00000001986f80b4 objc_retain + 20
1  libsystem_blocks.dylib         0x0000000198d79bf8 _Block_object_assign + 320
2  AVFoundation                   0x0000000186895a34 __copy_helper_block_171 + 36
3  libsystem_blocks.dylib         0x0000000198d79738 _Block_copy_internal + 384
4  libdispatch.dylib              0x0000000198d252fc _dispatch_Block_copy + 36
5  libdispatch.dylib              0x0000000198d2685c dispatch_async + 68
6  AVFoundation                   0x00000001868959ac -[AVPlayerItemVideoOutput _dispatchOutputSequenceWasFlushed] + 112
7  libdispatch.dylib              0x0000000198d2536c _dispatch_client_callout + 16
8  libdispatch.dylib              0x0000000198d2e6e8 _dispatch_barrier_sync_f_invoke + 76
9  AVFoundation                   0x00000001868940a8 AVPlayerItemVideoOutput_figVCSequentialAvailable + 196
10 MediaToolbox                   0x000000018a3c16f8 FigVisualContextImageAvailableSequential + 108
11 MediaToolbox …
Run Code Online (Sandbox Code Playgroud)

avfoundation ios gpuimage swift

6
推荐指数
1
解决办法
1694
查看次数

GPUImage Swift HelloWorld示例

我正在尝试在Swift中设置一个hello-world-type型GPUImage示例.代码构建没有错误,但我得到一个没有图像的纯白色屏幕.GPUImageView在故事板中更改为红色的背景颜色会更改设备上的颜色,但使用setBackgroundColorRed(...)该类的方法无效.

以下是我设置的步骤:

  1. 已安装GPUImage使用的CocoaPods
  2. 关闭项目并重新开放 .xcworkspace
  3. 放入#include "GPUImage.h"桥接文件头
  4. 将通用拖动UIView到故事板中,添加autolayout约束,将其类更改为GPUImageView,并在我的ViewController班级中创建了一个插座
  5. GPUImagePicture从我的应用程序包中的照片创建了一个
  6. 添加了视图作为图片的目标并处理了图像
import UIKit

class ViewController: UIViewController {

    let image = GPUImagePicture(image: UIImage(named: "cameraman.png"))
    @IBOutlet weak var imageView: GPUImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.image.addTarget(self.imageView)
        self.image.processImage()
    }

}
Run Code Online (Sandbox Code Playgroud)

如果我打印出来imageView或者image我得到非空的指针,并且它imageView有一个非零看的帧.奇怪的是,我在其他项目中使用了GPUImage而没有任何问题,并且无法想象这次我做了什么不同 - 我确定它是一个非常小的东西,我不知道,但我似乎无法把我的手指在上面.我在这里上传了这个项目:

https://bitbucket.org/DVigneault/stack/downloads

编辑:

我正在使用XCode 6.3和iOS 8.3

编辑2:

更新到XCode 6.3.1后的结果相同

编辑3:

如果我加self.image.processImage()viewDidAppear,我得到了想要的结果(即,显示图像).我发现,GPUImage在我过去使用过的任何时候,我都会processImage()在视图出现后至少打过一次电话.视图出现后是否 …

gpuimage swift

6
推荐指数
0
解决办法
1357
查看次数

GPU计算能力可以用于图像转换(tiff到jpeg)吗?如果是,如何实现它

在我的场景中,我从设备获取屏幕(它只生成tiff图像)并将其传输到jpeg并通过网络发送到客户端(客户端仅支持jpeg编码)

java code
    public byte[] getscreen(){
    /*
    logic for fetching tiff image from the device
    */
     if(tiffimage == null )
     return null;
     byteOutput = new ByteArrayOutputStream();
     ImageIO.write(tiffImage, "jpeg", byteOutput);
    return byteOutput;
    }
Run Code Online (Sandbox Code Playgroud)

对于设备生成图像,它需要10ms - 1秒,具体取决于设备的分辨率(请注意,此侧不能进行任何更改,它只生成tiff图像),大小为3 MB -12 MB,具体取决于决议.

现在将图像转换为JPEG需要一些时间.我的查询是,我们可以使用GPU功率将图像从tiff转换为JPEG,这样我就可以在客户端获得改进的FPS吗?

PS:该应用程序运行在具有显卡的各种机器上,如(NVDIA,AMD,Intel HD图形)我想知道是否可以这样做,如果是这样,如何处理解决方案.

java gpu gpuimage

6
推荐指数
1
解决办法
726
查看次数