gpt4 book ai didi

ios - opencv ios视频​​处理

转载 作者:可可西里 更新时间:2023-11-01 05:01:24 24 4
gpt4 key购买 nike

我正在尝试做找到的教程 here用于使用 openCv 框架进行 ios 视频处理。

我已成功将 ios openCv 框架加载到我的项目中 - 但是我的框架与教程中介绍的框架似乎不匹配,我希望有人能帮助我。

OpenCv 使用 cv::Mat代表图像的类型。当使用 AVfoundation 委托(delegate)处理来自相机的图像时 - 我需要转换所有 CMSampleBufferRef到那种类型。

教程中介绍的openCV框架似乎提供了一个名为using的库

#import <opencv2/highgui/cap_ios.h>

使用新的委托(delegate)命令:

任何人都可以指出我在哪里可以找到这个框架或可能在 CMSampleBufferRef 之间快速转换吗?和 cv::Mat

编辑

opencv框架中有很多分割(至少ios是这样)。我已经通过各种“官方”站点下载了它,并且还使用了诸如 fink 和 brew 之类的工具,并按照他们的说明进行了下载。我什至比较了安装到/usr/local/include/opencv/的头文件。他们每次都不一样。下载 openCV 项目时 - 同一项目中存在各种 cmake 文件和相互冲突的自述文件。我认为我通过这个 link 成功地为 IOS 构建了一个良好的版本,该版本具有框架内置的 avcapture 功能(带有此 header <opencv2/highgui/cap_ios.h> )然后使用 ios 目录中的 python 脚本构建库 - 使用命令 python opencv/ios/build_framework.py ios .我会尝试更新

最佳答案

这是我使用的转换。您锁定像素缓冲区,创建一个 cv::Mat,使用 cv::Mat 进行处理,然后解锁像素缓冲区。

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);

CVPixelBufferLockBaseAddress( pixelBuffer, 0 );

int bufferWidth = CVPixelBufferGetWidth(pixelBuffer);
int bufferHeight = CVPixelBufferGetHeight(pixelBuffer);
int bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer);
unsigned char *pixel = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer);
cv::Mat image = cv::Mat(bufferHeight,bufferWidth,CV_8UC4,pixel, bytesPerRow); //put buffer in open cv, no memory copied
//Processing here

//End processing
CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );
}

上述方法不会复制任何内存,因此您不拥有内存,pixelBuffer 将为您释放它。如果你想要你自己的缓冲区副本,就这样做

cv::Mat copied_image = image.clone();

关于ios - opencv ios视频​​处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12355257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com