我最初是在考虑 CoreImage 的情况下解决这个问题的(因为我还需要进行面部识别),但我意识到,不幸的是,CI 失真滤镜尚未包含在 iPhone 中。
我试图深入研究 GLImageProcessing、CImg 和 ImageMagick,尽管我在寻找学习其中任何一个的起点时遇到了很多麻烦。
考虑到存在图像失真的应用数量,我知道这不会非常困难。
我不懂 C 或 C++,除非绝对必要,否则没有时间学习这些语言。如果其中一个库是处理此任务的最终库,那将变得很有必要。
有人使用过这些库吗?
有没有专门介绍 iOS5 的书籍?
我找到的资源:
GLImageProcessing 示例项目 https://developer.apple.com/library/ios/#samplecode/GLImageProcessing/Introduction/Intro.html
ImageMagick 和 MagickWand http://www.imagemagick.org/script/magick-wand.php
简单的 iPhone 图像处理 http://code.google.com/p/simple-iphone-image-processing/
最佳答案
正如您所说,Core Image 目前的功能在 iOS 上有点受限。尤其是缺少您在桌面上找到的自定义内核,这令人失望。您列出的其他替代方案(GLImageProcessing 除外,它无法进行这种过滤)都是 CPU 绑定(bind)库,并且对于在移动设备上进行实时过滤来说太慢了。
但是,我可以为您指出一个名为 GPUImage 的开源框架我刚刚推出是因为我找不到可以让您实现自定义效果的东西。顾名思义,GPUImage 使用 OpenGL ES 2.0 着色器对静止图像和视频进行 GPU 加速处理。您可以使用这些编写自己的自定义效果,因此您应该能够做任何您能想到的事情。该框架本身是 Objective-C,并且具有相当简单的界面。
作为失真滤镜的示例,以下着色器(基于 Danny Pflughoeft's answer 中的代码)实现了一种鱼眼效果:
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
const mediump float bulgeFactor = 0.5;
void main()
{
mediump vec2 processedTextureCoordinate = textureCoordinate - vec2(0.5);
mediump float radius = processedTextureCoordinate.x * processedTextureCoordinate.x + processedTextureCoordinate.y * processedTextureCoordinate.y;
mediump vec2 distortedCoordinate = vec2(pow(radius, bulgeFactor)) * processedTextureCoordinate + vec2(0.5);
gl_FragColor = texture2D(inputImageTexture, distortedCoordinate);
}
这会在视频流上产生这种效果:
在我的基准测试中,GPUImage 在 iPhone 4 上处理图像的速度比 Core Image 快 4 倍(比 CPU 绑定(bind)处理快 6 倍),视频处理速度比 Core Image 快 25 倍(比在 CPU 上快 70 倍)。即使在我能想到的最坏情况下,它的处理速度也能与 Core Image 匹敌。
框架仍然相当新,所以我现在拥有的库存过滤器数量很少,但我很快就会添加更多。同时,您可以编写自己的自定义失真着色器来处理您的图像,并且所有内容的源代码都可供您根据需要进行调整。 My introductory post about it有更多关于如何在您的应用程序中使用它的详细信息。
关于objective-c - iOS 图像处理(失真),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9319265/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p