#include <stdio.h>
#include <iostream>
#include <thread>
#include<omp.h>
//#include <opencv2/core.hpp>
//#include <cv/cv_tools.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/version.hpp>
using namespace std;
using namespace cv; #define TEST_BY_OPENMP void childFunc(Mat& pic, Mat &dst)
{
int w = pic.cols;
int h = pic.rows;
//do{
int sz = * w*h;
for (int i = ; i != sz; ++i) {
//int src_data = pic.data[i];
//float ss= 1.234556;
//ss*=1.2;
//src_data+=ss;
//dst.data[i] = ((src_data >>5)<<5);
dst.data[i] = ((pic.data[i] >> ) << );
}
//}while(0);
} vector<Mat> split(Mat& _src, int n)
{
int sz = _src.cols*_src.rows*;
vector<Mat> pics(n);
for (int i = ; i != n; ++i) {
pics[i] = Mat(_src.rows/n,_src.cols,CV_8UC3, _src.data + i*sz/n );
}
return pics;
}
int main()
{
const int LOOPS = 1e10;
Mat src = imread("bg.jpg");
resize(src,src,Size(,));
Mat dst(src.size(),src.type());
vector<Mat> child_pics = split(src, );
vector<Mat> child_pics_d = split(dst, ); long long t0 = getTickCount(); for(int k=;k!=LOOPS;++k){
#ifdef TEST_BY_OPENMP
#pragma omp parallel num_threads(4)
{
int index = omp_get_thread_num();
childFunc(child_pics[index], child_pics_d[index]);
}//7.3 ms cpu=60% for (int i = ; i != ; ++i) {
childFunc(child_pics[i], child_pics_d[i]);
}//6.97ms cpu=45%
#else
thread t[];
for (int i = ; i != ; ++i) {
t[i] = thread(childFunc, child_pics[i], child_pics_d[i]);
}
for (int i = ; i != ; ++i) {
t[i].join();
}//21.32ms cpu=55%
#endif }; long long t1 = getTickCount();
double time_waste = double(t1 - t0) / getTickFrequency();
time_waste /= LOOPS;
printf("time waste=%.2f ms\n", time_waste * );
imshow("test", dst);
waitKey();
}

发现好像确实不能使用thread   分片处理图像数据   处理时间太慢   不知道为什么....可能是数据竞争的原因吧。。

openmp速度更快一些

最新文章

  1. 设立点击ProgressDialog外的区域对话框不消失
  2. Yocto开发笔记之《应用程序架构》(QQ交流群:519230208)
  3. Android学习笔记01-Mac下搭建Java开发环境
  4. [mysql]支持emoji(字符集问题)!
  5. C#函数运行超时则终止执行(任意参数类型及参数个数通用版)
  6. The Romantic Hero
  7. Buffer Cache 原理
  8. openwrt拦截snmp报文
  9. CentOS6.4下安装Nginx1.12.2
  10. Python中的turtle初探
  11. 19个实例学会plsql
  12. Ehcache计算Java对象内存大小
  13. css里px em rem特点(转)
  14. 【学亮IT手记】Servlet的生命周期
  15. ANSI C 常见宏的使用
  16. 有 a - b &lt; c 对Java安全性的思考
  17. 课程14:get和post是神马
  18. 【BZOJ】1617: [Usaco2008 Mar]River Crossing渡河问题(dp)
  19. Python 面向对象 (补充) , 反射 , 内置函数
  20. wait和notify函数的规范代码模板

热门文章

  1. saveLayerAlpha简单入门
  2. ISO/IEC 9899:2011 条款6.2.5——类型
  3. 阶段5 3.微服务项目【学成在线】_day18 用户授权_08-动态查询用户的权限-用户中心查询用户权限
  4. 算法习题---3.01猜数字游戏提示(UVa340)
  5. @Component默认是单例还是多例?
  6. 爆库记录(X-Forwarded-For注入漏洞实战 记录)
  7. LODOP获取打印状态码和时间列表
  8. 第五章 编码/加密——《跟我学Shiro》
  9. iOS-UIScrollView滚动视图(转)
  10. 查看某个进程PID对应的文件句柄数量,查看某个进程当前使用的文件句柄数量