如何在iOS上分析视频流?

Dvo*_*ole 2 video opencv objective-c video-processing ios

例如,有QR扫描仪实时扫描视频流并获得QR码信息.我想检查视频中的光源,如果它打开或关闭,它是非常强大的,所以它没有问题.

我可能会将视频流作为输入,可能会制作图像并分析图像或实时流式传输光源(可能是图像上某些颜色的像素数?)

我该如何处理这个问题?也许有一些图书馆的来源?

Ham*_*mer 19

这听起来像是在询问有关几个谨慎步骤的信息.有很多种方法可以做到每一种方法,如果你遇到任何一个步骤,最好单独发布一个关于它的问题.

1:获取视频帧

就像chaitanya.varanasi所说,AVFoundation Framework是在IOS上访问视频帧的最佳方式.如果你想要一些不那么灵活和快速的东西,试着看看开放式CV的视频捕捉.此步骤的目标是从相机访问像素缓冲区.如果您遇到此问题,请特别询问.

2:将像素缓冲区放入OpenCV

这部分非常简单.如果你从openCV的视频捕获中获得它,你已经完成了.如果从AVFoundation获得它,你需要将它放入openCV中

//Buffer is of type CVImageBufferRef, which is what AVFoundation should be giving you
//I assume it is BGRA or RGBA formatted, if it isn't, change CV_8UC4 to the appropriate format

CVPixelBufferLockBaseAddress( Buffer, 0 );

int bufferWidth = CVPixelBufferGetWidth(Buffer);
int bufferHeight = CVPixelBufferGetHeight(Buffer);

unsigned char *pixel = (unsigned char *)CVPixelBufferGetBaseAddress(Buffer);
cv::Mat image = cv::Mat(bufferHeight,bufferWidth,CV_8UC4,pixel); //put buffer in open cv, no memory copied

//Process image Here

//End processing
CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );
Run Code Online (Sandbox Code Playgroud)

注意我假设您计划在OpenCV中执行此操作,因为您使用了它的标记.另外我假设您可以将OpenCV框架链接到您的项目.如果这是一个问题,请询问有关它的具体问题.

3:过程图像

这部分是迄今为止最开放的部分.你所说的关于你的问题的一切都是你试图检测一个强大的光源.一种非常快速简便的方法是检测灰度图像中的平均像素值.如果您获得彩色图像,可以使用cvtColor进行转换.然后只需在其上调用Avg即可获得平均值.希望你可以通过该值如何波动来判断灯是否亮起.

chaitanya.varanasi提出了另一种选择,你也应该检查一下.

openCV是一个非常大的库,可以做各种各样的事情.在不了解您的问题的情况下,我不知道还能告诉您什么.