作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>void EdgeOpenMP(IplImage *src,IplImage *dst,int thresh)
{int height    = src->height;int width     = src->width;int step      = src->widthStep;uchar *data1      = (uchar *)src->imageData;uchar *data2      = (uchar *)dst->imageData;int i=step;#pragma omp parallel forfor(i=step+1;i<height*width;i++){if(abs(data1[i]-data1[i-1])>thresh || abs(data1[i]-data1[i-step])>thresh)data2[i]=255;/* 对于单通道,前后两帧差分大于门限或者对于多通道前后两帧的一个指标差分大于门限,则视为边缘*/elsedata2[i]=0;}
}void Edge(IplImage *src,IplImage *dst,int thresh)
{int height    = src->height;int width     = src->width;int step      = src->widthStep;uchar *data1      = (uchar *)src->imageData;uchar *data2      = (uchar *)dst->imageData;int i=step;for(i=step+1;i<height*width;i++){if(abs(data1[i]-data1[i-1])>thresh || abs(data1[i]-data1[i-step])>thresh)data2[i]=255;elsedata2[i]=0;}
}int main()
{char filename[512];IplImage *src,*edge1,*edge2;puts("File name:");gets(filename);src = cvLoadImage(filename,CV_LOAD_IMAGE_GRAYSCALE );edge1=cvCloneImage(src);edge2=cvCloneImage(src);cvNamedWindow("src", CV_WINDOW_AUTOSIZE);cvMoveWindow("src", 100, 100);cvShowImage( "src", src);cvNamedWindow("Edge", CV_WINDOW_AUTOSIZE);cvMoveWindow("Edge", 200, 100);cvNamedWindow("EdgeOpenMP", CV_WINDOW_AUTOSIZE);cvMoveWindow("EdgeOpenMP", 300, 100);/* 以上都是准备一些窗口和图形基本数据 */int tekrar=100;//运行次数int thresh=30;double start, end,t1, t2;/* 计算没有使用OpenMP优化的时间 */start= (double)cvGetTickCount();//记下开始的时钟计数,以便计算函数或用户代码执行时间for(int i=0;i<tekrar;i++)Edge(src,edge1,thresh);end= (double)cvGetTickCount();//记下结束的时钟计数t1= (end-start)/((double)cvGetTickFrequency()*1000.);//计算运行时间,以毫秒为单位printf( "Run time without OpenMP = %g ms/n", t1 );/* 计算使用了OpenMP优化的时间 */start= (double)cvGetTickCount();for(int i=0;i<tekrar;i++)EdgeOpenMP(src,edge2,thresh);end= (double)cvGetTickCount();t2= (end-start)/((double)cvGetTickFrequency()*1000.);printf( "Run time with OpenMP = %g ms/n", t2 );printf( "Performance ratio (%%) = %% %.1f /n", 100*(t1/t2-1) );cvShowImage( "Edge", edge1);cvShowImage( "EdgeOpenMP", edge2);cvWaitKey();cvDestroyWindow("Edge");cvDestroyWindow("EdgeOpenMP");cvReleaseImage(&src);cvReleaseImage(&edge1);cvReleaseImage(&edge2);
}这是我的结果:
File name:
dog.jpg
Run time without OpenMP = 647.627 ms
Run time with OpenMP = 453.001 ms
Performance ratio (%) = % 43.0

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

【OpenCV学习】OpenMP并行化实例相关推荐

  1. OpenMP并行化实例----Mandelbrot集合并行化计算

    在理想情况下,编译器使用自动并行化能够管理一切事务,使用OpenMP指令的一个优点是将并行性和算法分离,阅读代码时候无需考虑并行化是如何实现的.当然for循环是可以并行化处理的天然材料,满足一些约束的 ...

  2. OpenCV语义细分深度学习网络的实例(附完整代码)

    OpenCV语义细分深度学习网络的实例 OpenCV语义细分深度学习网络的实例 OpenCV语义细分深度学习网络的实例 #include <fstream> #include <ss ...

  3. OpenCV运行对象检测深度学习网络的实例(附完整代码)

    OpenCV运行对象检测深度学习网络的实例 OpenCV运行对象检测深度学习网络的实例 OpenCV运行对象检测深度学习网络的实例 #include <fstream> #include ...

  4. OpenCV运行分类深度学习网络的实例(附完整代码)

    OpenCV运行分类深度学习网络的实例 OpenCV运行分类深度学习网络的实例 OpenCV运行分类深度学习网络的实例 #include <fstream> #include <ss ...

  5. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast

    OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...

  6. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

  7. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  8. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  9. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

最新文章

  1. Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理,子集反演)
  2. [YTU]_1066 ( 输入n个数和输出调整后的n个数)
  3. linux多少个端口,Linux允许python使用多少个网络端口?
  4. Win32 API串口编程
  5. Ubuntu装机后的基础应用
  6. 太耿直了!自家总监评拯救者Y90的640GB超大存储:用来吹牛的
  7. Visual Studio.NET 2008开发一册通--LINQ从基础到项目实战这本书怎么样
  8. 【Oracle】详解10053事件
  9. 控制网页frame vba_V8 bindings 设计isolate,context,world,frame之间的关系(翻译)
  10. c语言鼠标游戏代码,自己用C写的一个简单的打地鼠游戏代码出了个问题(鼠标和循环不能...
  11. [水晶报表]水晶报表创建以及调用方法
  12. 适合新手的python练习(9)
  13. 2020寒假第三周总结
  14. android 发音乐通知到通知栏
  15. 大数据学习根据应用目标,主要可以划分为哪三个阶段?
  16. 史密斯(smith)圆图讲解
  17. 【Java进阶营】月薪10000+,一天的工作量只改5行代码,我也要当程序员
  18. Android内存泄漏总结,年薪超过80万!
  19. Java 基础笔记代码 流
  20. 顺利通过论文查重检测的小技巧

热门文章

  1. BZOJ4557:[JLOI2016/SHOI2016]侦察守卫——题解
  2. HDU1561:The more, The Better——题解
  3. Delphi实现的透明阴影以及蒙版效果菜单
  4. IBM 的大型机 z Systems 引入 Go 语言
  5. nginx+tomcat8+memcached实现session共享具体操作
  6. 基于嵌入式webserver的服务器状态监控
  7. 图片处理--熔铸特效
  8. SharePoint at .NET技术大会
  9. python treeview底部加个按钮_Python爬取京东商品信息(GUI版本)
  10. 算法61---两个字符串的最小ASCII删除和【动态规划】