全部,
我是图像处理的新手,我需要使用iphone4进行一些图像处理.仅支持Iphone 4 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange/kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange/kCVPixelFormatType_420YpCbCr8BiPlanarfullRange .
但我需要YUV420,rgb24和其他一些.i计划使用Accelerate Framework VimageConversion库进行转换.但是框架使用Planar8, PlanarF, ARGB8888, ARGBFFFF, RGBA8888, and RGBAFFFFFormat 完成了所有处理 .如何将此格式与Iphone支持的格式相关联.我无法对Planar8, PlanarF, ARGB8888, ARGBFFFF, RGBA8888, and RGBAFFFF格式进行任何解释 .
任何人都可以解释一下Planar8,PlanarF,ARGB8888,ARGBFFFF,RGBA8888和RGBAFFFF - ?
重要更新:我已经找到答案并将它们放在这个简单的开源库中:http://bartolsthoorn.github.com/NVDSP/检查一下,如果遇到问题,它可能会节省很多时间在IOS中使用音频过滤器!
^
我创建了一个(实时)音频缓冲区(float *data),它可以容纳几个sin(theta)不同频率的波.
下面的代码显示了我是如何创建缓冲区的,我试图做一个带通滤波器,但它只是将信号转换为噪声/闪烁:
// Multiple signal generator
__block float *phases = nil;
[audioManager setOutputBlock:^(float *data, UInt32 numFrames, UInt32 numChannels)
{
float samplingRate = audioManager.samplingRate;
NSUInteger activeSignalCount = [tones count];
// Initialize phases
if (phases == nil) {
phases = new float[10];
for(int z = 0; z <= 10; z++) {
phases[z] = 0.0;
}
}
// Multiple signals
NSEnumerator * enumerator = [tones objectEnumerator];
id frequency;
UInt32 c = …Run Code Online (Sandbox Code Playgroud) audio signal-processing objective-c core-audio accelerate-framework
我正在使用加速框架来优化我的DSP代码.有几次我想将一个数组(或数组的一部分)的内容复制到另一个数组.
我似乎无法找到合适的函数来执行此操作,因此我一直在做一些愚蠢的事情,即将数组乘以1(或加0)并以此方式获取副本.
float one = 1;
float sourceArray = new float[arrayLength];
/////....sourceArray is filled up with data
float destArray = new float[arrayLength];
vDSP_vsmul(sourceArray, 1, &one, destArray, 1, arrayLength);
Run Code Online (Sandbox Code Playgroud)
必须有一个更好的方法来做到这一点!?谢谢!
我正在尝试使用vImage来计算图像的直方图vImageHistogramCalculation_ARGBFFFF,但我得到了一个vImage_Error类型kvImageNullPointerArgument(错误代码为-21772).
这是我的代码:
- (void)histogramForImage:(UIImage *)image {
//setup inBuffer
vImage_Buffer inBuffer;
//Get CGImage from UIImage
CGImageRef img = image.CGImage;
//create vImage_Buffer with data from CGImageRef
CGDataProviderRef inProvider = CGImageGetDataProvider(img);
CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);
//The next three lines set up the inBuffer object
inBuffer.width = CGImageGetWidth(img);
inBuffer.height = CGImageGetHeight(img);
inBuffer.rowBytes = CGImageGetBytesPerRow(img);
//This sets the pointer to the data for the inBuffer object
inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);
//Prepare the parameters to pass to vImageHistogramCalculation_ARGBFFFF
vImagePixelCount *histogram[4] = …Run Code Online (Sandbox Code Playgroud) vImageHistogramCalculation_ARGB8888尝试将库从Swift 2转换为Swift 3版本时,我遇到了方法问题.问题是该方法仅接受"histogram"参数
UnsafeMutablePointer<UnsafeMutablePointer<T>?>
Run Code Online (Sandbox Code Playgroud)
但是Swift 3的构造
let histogram = UnsafeMutablePointer<UnsafeMutablePointer<vImagePixelCount>>(mutating: rgba)
Run Code Online (Sandbox Code Playgroud)
返回unwrapped值,所以我无法将其强制转换为正确的类型.
编译器错误是:
:无法使用类型'(mutating:[UnsafeMutablePointer])'的参数列表调用类型'UnsafeMutablePointer?>'的初始值设定项
你有什么想法吗?我试着添加"?" 到直方图常数,但后来我收到错误:
'init'不可用:使用'withMemoryRebound(to:capacity:_)'临时查看内存作为另一种布局兼容类型.
有一些编译器建议,但我不知道如何使用它.
我正在研究Novocaine的DSP类(obj-c ++),但我的滤波器似乎只会对信号造成噪声/失真.
我在这里发布了我的完整代码和系数:https://gist.github.com/2702844 但它基本上归结为:
// Deinterleaving...
// DSP'ing one channel:
NVDSP *handleDSP = [[NVDSP alloc] init];
[handleDSP setSamplingRate:audioManager.samplingRate];
float cornerFrequency = 6000.0f;
float Q = 0.5f;
[handleDSP setHPF:cornerFrequency Q:Q];
[handleDSP applyFilter:audioData length:numFrames];
// DSP other channel in the same way
// Interleaving and sending to audio output (Novocaine block)
Run Code Online (Sandbox Code Playgroud)
请参阅要点以获取完整的代码/上下文.
系数:
2012-05-15 17:54:18.858 nvdsp[700:16703] b0: 0.472029
2012-05-15 17:54:18.859 nvdsp[700:16703] b1: -0.944059
2012-05-15 17:54:18.860 nvdsp[700:16703] b2: 0.472029
2012-05-15 17:54:18.861 nvdsp[700:16703] a1: -0.748175
2012-05-15 17:54:18.861 nvdsp[700:16703] a2: …Run Code Online (Sandbox Code Playgroud) 我最近升级到优胜美地,但似乎在编译使用通过自制软件获得的gcc-4.9的Accelerate Framework的C++程序时出现问题.我想知道是否有人有任何解决方案吗?这在以前的OSX版本中不是问题.
例如,考虑编译以下代码.
#include<iostream>
#include<Accelerate/Accelerate.h>
using namespace std;
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当使用clang进行编译时,每个东西都可以工作(Apple LLVM 6.0版(clang-600.0.54)):
clang++ -flax-vector-conversions -o main.out main.cpp -framework Accelerate
Run Code Online (Sandbox Code Playgroud)
但是用g ++ - 4.9编译时(g ++ - 4.9(Homebrew gcc49 4.9.1)4.9.1):
g++-4.9 -flax-vector-conversions -o main.out main.cpp -framework Accelerate
Run Code Online (Sandbox Code Playgroud)
我得到以下编译错误:
> g++-4.9 -flax-vector-conversions -o main.out main.cpp -framework Accelerate
In file included from /usr/include/os/object.h:27:0,
from /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/LinearAlgebra/base.h:6,
from /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/LinearAlgebra/LinearAlgebra.h:10,
from /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Headers/vecLib.h:65,
from /System/Library/Frameworks/Accelerate.framework/Headers/Accelerate.h:20,
from main.cpp:2:
/usr/include/os/base.h:113:20: error: missing binary operator before token "("
#if __has_extension(attribute_overloadable)
^
/usr/include/os/base.h:119:54: error: missing binary operator before token …Run Code Online (Sandbox Code Playgroud) 来自苹果文档
根据文件
func vvlog10f(_ _: UnsafeMutablePointer<Float>,
_ _: UnsafePointer<Float>,
_ _: UnsafePointer<Int32>)
/* y */ /* x */ /* n */
Run Code Online (Sandbox Code Playgroud)
那么我做错了什么?
这是我的代码
import Accelerate
var input:[Float] = [0.124,0.5,0.0056]
var output:[Float] = []
var i:Int32 = Int32(input.count)
vvlog10f(&output,&input,&i)
println("output is \(output)")
Run Code Online (Sandbox Code Playgroud)
输出是[]
我应该如何使用 Accelerate 框架在 iOS 上的 Swift 中计算真实信号的 FFT?
Apple 的 Accelerate 框架似乎提供了有效计算信号 FFT 的功能。
不幸的是,Internet 上可用的大多数示例(如Swift-FFT-Example和TempiFFT )在进行广泛测试并调用 Objective C API 时会崩溃。
在苹果文档回答了许多问题,但也导致了一些人(这是一块强制?为什么我需要这个调用转换?)。
很少有线程通过具体示例来解决 FFT 的各个方面。值得注意的是,在 Swift 中使用 Accelerate 的 FFT,Swift中的DFT 结果与 MATLAB和FFT 计算错误 - Swift 的结果不同。他们都没有直接解决“从 0 开始做这件事的正确方法是什么”的问题?
我花了一天时间才弄清楚如何正确地做到这一点,所以我希望这个帖子可以清楚地解释您应该如何使用 Apple 的 FFT,展示要避免的陷阱,并帮助开发人员节省宝贵的时间时间。
下面的 C 程序 (dgesv_ex.c)
#include <stdlib.h>
#include <stdio.h>
/* DGESV prototype */
extern void dgesv( int* n, int* nrhs, double* a, int* lda, int* ipiv,
double* b, int* ldb, int* info );
/* Main program */
int main() {
/* Locals */
int n = 10000, info;
/* Local arrays */
/* Initialization */
double *a = malloc(n*n*sizeof(double));
double *b = malloc(n*n*sizeof(double));
int *ipiv = malloc(n*sizeof(int));
for (int i = 0; i < n*n; i++ )
{
a[i] = ((double) …Run Code Online (Sandbox Code Playgroud)