- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 AVFoundation 并从 AVCaptureVideoDataOutput
获取样本缓冲区,我可以使用以下方法将其直接写入 videoWriter:
- (void)writeBufferFrame:(CMSampleBufferRef)sampleBuffer {
CMTime lastSampleTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
if(self.videoWriter.status != AVAssetWriterStatusWriting)
{
[self.videoWriter startWriting];
[self.videoWriter startSessionAtSourceTime:lastSampleTime];
}
[self.videoWriterInput appendSampleBuffer:sampleBuffer];
}
我现在想做的是裁剪和缩放 CMSampleBufferRef 中的图像,而不将其转换为 UIImage 或 CGImageRef,因为这会降低性能。
最佳答案
如果您使用 vimage,您可以直接处理缓冲区数据而无需将其转换为任何图像格式。
outImg
包含裁剪和缩放的图像数据。 outWidth
和 cropWidth
之间的关系设置缩放比例。
int cropX0, cropY0, cropHeight, cropWidth, outWidth, outHeight;
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(imageBuffer,0);
void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
vImage_Buffer inBuff;
inBuff.height = cropHeight;
inBuff.width = cropWidth;
inBuff.rowBytes = bytesPerRow;
int startpos = cropY0*bytesPerRow+4*cropX0;
inBuff.data = baseAddress+startpos;
unsigned char *outImg= (unsigned char*)malloc(4*outWidth*outHeight);
vImage_Buffer outBuff = {outImg, outHeight, outWidth, 4*outWidth};
vImage_Error err = vImageScale_ARGB8888(&inBuff, &outBuff, NULL, 0);
if (err != kvImageNoError) NSLog(@" error %ld", err);
因此将cropX0 = 0
和cropY0 = 0
以及cropWidth
和cropHeight
设置为原始大小意味着没有裁剪(使用整个原始图像)。设置 outWidth = cropWidth
和 outHeight = cropHeight
不会导致缩放。请注意,inBuff.rowBytes
应始终是完整源缓冲区的长度,而不是裁剪后的长度。
关于iphone - iOS - 缩放和裁剪 CMSampleBufferRef/CVImageBufferRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8493583/
- (void)processPixelBuffer: (CVImageBufferRef)pixelBuffer { CVPixelBufferLockBaseAddress( pixelB
我想使用 QTKit.framework 将所有帧写入磁盘以进行相机输入。但我得到的所有图像都是半透明的并且没有一些颜色,也许是色彩空间问题? ;(它们在预览 View 中看起来不错,但是当我编写它们
我正在尝试从 QT 电影的各个帧中提取像素数据。 我想我需要使用 CV,因为 QTKit 和 NSImage 会 太慢了... 我需要比较包含网络摄像头 (iSight) 当前帧的缓冲区 (CVIma
我正在制作一个简单的管道,从 AVCaptureSession 获取图像,在 OpenCV 中处理它们,然后在 OpenGL 中渲染它们。它基于 RosyWriter 但没有音频和录音功能。 Open
我是 iOS 编程和多媒体的新手,我正在研究一个名为 RosyWriter 的示例项目,该项目由 apple 在 this link 提供。 .在这里,我看到在代码中有一个名为 captureOutp
在 objective-c 中,您可以轻松地将 CVImageBufferRef 转换为 CVPixelBufferRef: CMSampleBufferRef sampleBuffer = some
此代码大部分都有效,但生成的数据似乎失去了颜色 channel (这是我的想法),因为生成的图像数据在显示时是蓝色的! 代码如下: UIImage* myImage=[UIImage imageNam
我正在使用 AVFoundation 并从 AVCaptureVideoDataOutput 获取样本缓冲区,我可以使用以下方法将其直接写入 videoWriter: - (void)writeBuf
我正在尝试从相机捕获视频。我已经获得了要触发的 captureOutput:didOutputSampleBuffer: 回调,它为我提供了一个示例缓冲区,然后我将其转换为 CVImageBuffer
我想分析来自 iOS 相机的每帧像素。我想知道是否有任何理由从 CVImageBufferRef 转到 CGImageRef,然后从 CGImageRef 获取像素,或者这些数据是否基本相同。想到的事
我有 CMSampleBufferRef(s),我使用 VTDecompressionSessionDecodeFrame 对其进行解码,这会在帧解码完成后生成 CVImageBufferRef,所以
我正在开发一个使用 AVFoundation 和 iDevices 后置摄像头进行实时视频处理的应用程序。 AVCaptureSession 配置了 sessionPreset AVCaputeSes
我现在想合并两个成功的概念。我成功地将 CATextLayer 分层到 CVImageBufferRef 相机框架上,然后使用 AVAssetWriterInputPixelBufferAdaptor
我尝试从 CVImageBufferRef 加载纹理: func createTextureFromCVImageBufferRef(buffer: CVImageBufferRef) { l
我有两种算法可以检测 AR 标记(ARToolKit 和 Infi)。我让他们在 iPhone 上实时检测标记。在这个阶段,我想比较一下它们的速度和准确性。我想准备一系列图像并对其进行测试识别。我可以
我是一名优秀的程序员,十分优秀!