双核机器使用openmp简单测试opencv

在双核Intel机器上,通过OpenMP对OpenCV进行并行处理测试,发现仅少数函数如cvCalcOpticalFlowPyrLK有所加速,优化效果不明显,瓶颈可能在于硬盘IO、摄像头IO和内存IO。提供了一个简单的OpenMP并行测试示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

因为机器是双核。想到怎么才能更好应用opencv ,

从opencv说明上得到

" - 一些函数可以使用 OPENMP 做并行处理:
cvHaarDetectObjects, cvCalcOpticalFlowPyrLK, cvDistTransform (the new algorithm only),
因此它们的运行速度在双核CPU上要快 ~50-80% , 当代码用 Intel compiler 或者 MSVC2005
编译时。"

于是实验一下.

环境 :

机器配置 :  windows XP 32 , 2G RAM , dual core intel 1.8G *2

软件 : opencv版本rc1 ,vc2005 中文简体

1.VC2005下首先需要设置一下,但是opencv提供的release openmp配置好像是针对win64版本,需要修改一下,我就自己建立了一套配置,
如图,记得打开/openmp选项,
需要打开的项目是
CV
CXCORE
CVAUX
(可以搜索一下_OPENMP ,发现只有几个函数优化了:( )

2.编译问题

我编译的时候出现这个错误
7>./cvbgfg_gaussmix.cpp(343) : error C2039: “foreground_regions”: 不是“CvGaussBGModel”的成员
7>        c:/Program Files/OpenCV/cvaux/include/cvaux.h(1300) : 参见“CvGaussBGModel”的声明
最后修改cvaux.h里的
CV_BG_STAT_MODEL_FIELDS 里面的 oreground_regions?/  变成 oreground_regions*/ 
我觉得我是英文版XP的问题导致文件乱码,需要修改一下的

3.编译完成用例子lkdemo测试一下,因为它用到了cvCalcOpticalFlowPyrLK ,

修改lkdemo.c的代码,需要将一些IO操作、空闲cpu的代码去掉
把 cvQueryFrame( capture );变成 frame = cvLoadImage("c://test1.bmp",1); 放到for()外边
去掉cvWaitKey(10);

在需要优化的地方加入
#pragma omp parallel

最后发现可以利用CPU 51%-53% ,说明只是很少使用到了第二个CPU

,而不加时平时是最多50% 

而使用最简单的测试openmp的例子可利用CPU 100%

4。结论

目前opencv提供的优化还太少,只有这么几个函数,实际上但感觉现在似乎不太需要openmp ,而瓶颈在硬盘IO,摄像头IO,内存IO等等

5。附带最简单的测试openmp的例子

#include "stdafx.h"
#include "omp.h"

int _tmain(int argc, _TCHAR* argv[])
{

#pragma omp parallel
 for(;;)
 {
  int i = 0 ;
  i++;
  int y = i;
 }
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值