视频马赛克的实时检测

在前面的一篇博文中,阐述了如何实现图片马赛克的检测。但是对于视频马赛克检测来说实时性显得很有必要,这次主要讲解我是如何实现马赛克实时检测的。

1.实现过程

这里,马赛克的实时检测是通过多线程来实现的,由于多线程和电脑硬件设施有着直接的关系,所以这里贴出电脑的配置图。
视频马赛克的实时检测_第1张图片
电脑处理器是i3、4核处理器,主频2.13GHz,运行内存3.11GB,32位操作系统。

由于电脑是四核处理器,因此,程序采用了四线程的方式来进行马赛克检测。具体实现就是创建四个线程同时检测图片是否含有马赛克,大致如下:

HANDLE pThread1=CreateThread(NULL,0,PROCESS1,NULL,0,NULL);
    HANDLE pThread2=CreateThread(NULL,0,PROCESS2,NULL,0,NULL);
    HANDLE pThread3=CreateThread(NULL,0,PROCESS3,NULL,0,NULL);

    HANDLE hMutex=CreateMutex(NULL,FALSE,NULL);

    CloseHandle(pThread1);
    CloseHandle(pThread2);
    CloseHandle(pThread3);

主线程加上这三个副线程,共四个线程。其中PROCESS1,PROCESS2,PROCESS3是三个马赛克检测线程名称。(后面附上代码链接)

2.实现效果

实验对象选取了40帧图片进行操作,比较单线程和四线程的运行时间,同时比较实现的效果。

首先是单线程的实现效果图,如下所示:
视频马赛克的实时检测_第2张图片
可以看到,四十帧的图片花了11.354s,每帧耗时283.85ms,无法满足实时性要求(高清视频每帧耗时约40ms)。

现在,看看四线程的实现效果图:
视频马赛克的实时检测_第3张图片
四线程的总耗时是3.714s,每帧耗时92.85ms,相比较于单线程时间上有了283.85/92.85=3.06倍的提升,但是单帧耗时仍然超过了预期。但是多线程程序特别依赖于电脑硬件参数,于是乎,将这个程序换了一台配置较好的系统,配置为:
i7、8核处理器,主频3.40GHz,运行内存3.89GB。
得到的运行结果图如下:
视频马赛克的实时检测_第4张图片
现在检测40帧的图片总耗时为0.967s,每帧耗时24.175ms<40ms,满足实时性检测要求。

3.总结

利用多线程可以有效地提高程序的运行效率,但是要注意的是多线程和硬件属性有着很大的关系,需要合理使用。再者就是实时性的实现对电脑的配置有着一定的要求。配置太低的话,无法实现马赛克马赛克检测的实时性效果。

马赛克实时性检测程序链接:
http://download.csdn.net/detail/zhancf/9285265
(需配置opencv环境)

你可能感兴趣的:(程序研发,多线程,马赛克实时检测)