简单实用openmp

Openmp

 

我把它简单理解为并行加速,做图像处理时特别有用,可以以最简单的方法极大的提升效率,节约时间,特别是高分辨率图像处理。

使用openmp,在vs中使用需要将openmp勾选一下,

然后加上头文件<omp.h>,

下面是使用例子

void OpenmpTest()
{
	cv::Mat img;
	//img.create(cv::Size(2880, 1440), CV_32FC1);
	img = cv::Mat(cv::Size(2880, 1440), CV_32FC1, cv::Scalar(12));
	//img.create(cv::Size(2880, 1440), CV_8UC1);
	int i, j;
	int w = img.cols;
	int h = img.rows;
	int k;
	int up = 50;
	float *data = (float *)img.data;
	//uchar *data = img.data;
	int64 tt;

	tt = cv::getTickCount();
#pragma omp parallel for
	for (i = 0; i < h; i++)
	{
#pragma omp parallel for
		for (j = 0; j < w - 1; j++)
		{
			//data[i * w + j] = data[i * w + j] * 38.9 / 100.9 * 38.9 / 100.9 * 38.9 / 100.9 * 38.9 / 100.9 * 38.9 / 100.9 * 38.9 / 100.9;
//#pragma omp parallel for
			//for (k = 0; k < up; k++)
			{
				//data[i * w + j] = data[i * w + j] + data[i * w + j] * 50.8 / 64.1;
				//data[i * w + j] = (float)50.8;
				//data[i * w + j + 1] = (float)50.8;
				data[i * w + j] = data[i * w + j] * data[i * w + j + 1];
				//img.at<float>(h, w) = (float)50.8;
			}
		}
	}
	std::cout << "openmp: " << (cv::getTickCount() - tt) / cv::getTickFrequency() * 1000 << "ms" << std::endl;

	//tt = cv::getTickCount();
	//for (i = 0; i < h; i++)
	//{
	//	for (j = 0; j < w; j++)
	//	{
	//		//data[i * w + j] = data[i * w + j] * 38.9 / 100.9 * 38.9 / 100.9 * 38.9 / 100.9 * 38.9 / 100.9 * 38.9 / 100.9 * 38.9 / 100.9;
	//		for (k = 0; k < up; k++)
	//		{
	//			data[i * w + j] = data[i * w + j] + data[i * w + j] * 50.8 / 64.1;
	//		}
	//	}
	//}
	//std::cout << "normal: " << (cv::getTickCount() - tt) / cv::getTickFrequency() * 1000 << "ms" << std::endl;
}

img是一幅自建的图像,直接取址赋值就行,但是测试.at<h,w>程序就崩掉。

 

如果调用的库有使用openmp,那主程序最好也勾选上支持,否则有可能出错,目前不清楚是哪里出错,但是不勾选最后生成的应用程序在win7上跑特别慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值