运用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
目录
相关文章
|
12天前
|
编解码 监控 算法
图像和视频处理中DSP算法的研究与发展
图像和视频处理中DSP算法的研究与发展
21 2
|
3月前
|
编解码 算法 自动驾驶
探索OpenCV:图像处理的利器
探索OpenCV:图像处理的利器
31 0
|
缓存 openCL 算法
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
关于实现Halcon算法加速的基础知识(多核并行/GPU)
2596 0
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
|
8月前
|
算法 计算机视觉 异构计算
FPGA图像处理之rgbtogray算法的实现
Ycbcrr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y'为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成份。Y'和Y是不同的,而Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理。
|
12月前
|
机器学习/深度学习 人工智能 缓存
英伟达用AI设计GPU算术电路,面积比最先进EDA减少25%,速度更快、更加高效
英伟达用AI设计GPU算术电路,面积比最先进EDA减少25%,速度更快、更加高效
210 0
|
12月前
|
编译器 C++ 智慧交通
智慧交通day01-算法库01:numba
numba是一个用于编译Python数组和数值计算函数的编译器,这个编译器能够大幅提高直接使用Python编写的函数的运算速度。
122 0
|
机器学习/深度学习 人工智能 数据可视化
Pytorch2 如何通过算子融合和 CPU/GPU 代码生成加速深度学习
Pytorch2 如何通过算子融合和 CPU/GPU 代码生成加速深度学习
733 0
|
算法 5G
m基于MATLAB的上行链路MIMO关键技术的研究与性能分析
m基于MATLAB的上行链路MIMO关键技术的研究与性能分析
117 0
m基于MATLAB的上行链路MIMO关键技术的研究与性能分析
|
并行计算 定位技术
SLAM各种并行加速方法
SLAM各种并行加速方法
SLAM各种并行加速方法
|
机器学习/深度学习 人工智能 数据可视化
100倍加速!深度学习训练神器Determined AI宣布开源!更快,更简单,更强大
还在抱怨模型训练过于耗时?还在手动苦苦调整超参?现在,这款神器来帮你!24倍分布式训练加速,100倍智能超参优化,Determind AI宣布开源,你的模型有救了!
923 0
100倍加速!深度学习训练神器Determined AI宣布开源!更快,更简单,更强大

热门文章

最新文章