运用OpenMP提速图像处理速度

简介: 一、算法测试// openmptest的测试程序#include "stdafx.h"void Test(int n){    for (int i=0;i
一、算法测试
// openmptest的测试程序
#include "stdafx.h"
void Test(int n){
    for (int i=0;i<10000;i++)
    {
        int j=0;
        j = j+1;
    }
    printf("%d",n);
}
int _tmain(int argc, _TCHAR* argv[])
{
    for (int i=0;i<10;i++)
    {
        Test(i);
    }
    getchar();
    return 0;
}
img_692c75ff66ffe08cf4983c306862aa05.jpe
而开启openmp
img_535b128ce837bd9df230d86367ef3bae.png

// openmptest的测试程序

#include "stdafx.h"
void Test(int n){
    for (int i=0;i<10000;i++)
    {
        int j=0;
        j = j+1;
    }
    printf("%d",n);
}
int _tmain(int argc, _TCHAR* argv[])
{
    for (int i=0;i<10;i++)
    {
        Test(i);
    }
    getchar();
    return 0;
}
结果
img_7191ff508423d7ff5aecccceb7cb45a9.jpe
可以发现明显运算的顺序变化了,就是因为有并行的存在。
二、批量处理多张图片
编写较为复杂的opencv 程序
// openmptest的测试程序
#include "stdafx.h"
#include <iostream>
#include <opencv2/opencv.hpp>  
#include "GoCvHelper.h"
using namespace std;
using namespace cv;
using namespace GO;
Mat Test(Mat src){
    Mat draw;
    Mat gray;
    cvtColor(src,gray,COLOR_BGR2GRAY);
    threshold(gray,gray,100,255,THRESH_OTSU);
    connection2(gray,draw);
    return draw;
}
int _tmain(int argc, _TCHAR* argv[])
{    
    //时间记录
    const int64 start = getTickCount();
    vector<Mat> vectorMats;
    //文件目录
    char cbuf[100= "F:/图片资源/纹理库brodatz/brodatzjpg";
    //获取所有文件
    getFiles(cbuf,vectorMats);
    //循环处理
   // #pragma omp parallel for
    for (int i=0;i<vectorMats.size();i++)
    {
        Mat dst = Test(vectorMats[i]);
    }
    
    //时间
    double duration = (cv::getTickCount() - start)/getTickFrequency();
    printf("共消耗时间%f",duration);
    waitKey();
    return 0;
}
使用openmp的时间
img_386ba29467d1698aea0281ffd2deaf34.jpe
不用mp的是这么长时间
img_57911dc61c1697a1a334accd094a05a5.jpe
三、处理视频类流数据
 进一步对openmp进行研究,发现它对于流数据也有很好支持:
#pragma omp parallel sections  
    {
        #pragma omp section  
        {
                GetHessianLambdas(camframe,5,lambda1_Sigma5,lambda2_Sigma5);
        }
        #pragma omp section  
        {
                GetHessianLambdas(camframe,7,lambda1_Sigma7,lambda2_Sigma7);
        }
    }
就直接可已将运算速度至少增加一倍。
四、多平台支持。
而且对于QT的支持也非常直接,直接采用
QMAKE_CXXFLAGS += -fopenmp
LIBS += -fopenmp
加入配置文件,连代码都不需要修改,非常方便。




附件列表

 

目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
缓存 openCL 算法
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
关于实现Halcon算法加速的基础知识(多核并行/GPU)
2555 0
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
|
7月前
|
算法 计算机视觉 异构计算
FPGA图像处理之rgbtogray算法的实现
Ycbcrr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y'为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成份。Y'和Y是不同的,而Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理。
|
9月前
开源代码分享(1)—考虑经济性的储能运行优化(附matlab代码)
        为应对能源危机与环境污染的双重压力,大量风电、光伏等清洁电源以及电动汽车、电采暖等再 电气化设备接入电网,导致电网备用需求、峰谷差、调峰压力显著增大。由于储能系统优良的调节性能,其作为一种新技术参与系统调峰越来越受到广泛关注。目前,储能可以集中地配置在电源侧或高压电网中,也可以分布式形式接入配电网。储能的分布式接入可以就近平抑负荷,能够更有效地降低电源和电网的投资,改善系统运行性能,提升运行经济性。
|
9月前
|
监控 算法 调度
Python|基于粒子群和遗传算法的微电网优化调度
Python|基于粒子群和遗传算法的微电网优化调度
|
11月前
|
机器学习/深度学习 并行计算 算法
图像预处理库CV-CUDA开源了,打破预处理瓶颈,提升推理吞吐量20多倍
图像预处理库CV-CUDA开源了,打破预处理瓶颈,提升推理吞吐量20多倍
152 0
|
11月前
|
机器学习/深度学习 数据采集 算法
兼容PyTorch,25倍性能加速,国产框架OneFlow「超速」了(1)
兼容PyTorch,25倍性能加速,国产框架OneFlow「超速」了
151 0
|
11月前
|
机器学习/深度学习 算法 PyTorch
兼容PyTorch,25倍性能加速,国产框架OneFlow「超速」了(2)
兼容PyTorch,25倍性能加速,国产框架OneFlow「超速」了
164 0
|
11月前
|
编译器 C++ 智慧交通
智慧交通day01-算法库01:numba
numba是一个用于编译Python数组和数值计算函数的编译器,这个编译器能够大幅提高直接使用Python编写的函数的运算速度。
120 0
|
缓存 编解码 算法
Skia深入分析10——Skia库的性能与优化潜力
Skia库性能与优化潜力 图形/渲染 算法/架构 作为图形渲染引擎,性能上是非常重要的,按通常Android手机60帧的刷新率,绘制一帧的总时间只有16ms,可谓是毫厘必争。提升性能到最后,就必然跟不同CPU的特性打交道,毕竟一个SIMD下去,好做的提升5、6倍,不那么好做的也达到2、3倍,收益极其可观。 SIMD,在intel上是SSE,在arm上是neon,在
7794 0
|
并行计算 定位技术
SLAM各种并行加速方法
SLAM各种并行加速方法
SLAM各种并行加速方法

热门文章

最新文章