运用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)
2544 0
关于实现Halcon算法加速的基础知识(2)(多核并行/GPU)
|
7月前
|
算法 计算机视觉 异构计算
FPGA图像处理之rgbtogray算法的实现
Ycbcrr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y'为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成份。Y'和Y是不同的,而Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理。
|
7月前
|
机器学习/深度学习 算法 C语言
FPGA图像处理之边缘检测算法的实现
边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。
FPGA图像处理之边缘检测算法的实现
|
9月前
|
监控 算法 调度
Python|基于粒子群和遗传算法的微电网优化调度
Python|基于粒子群和遗传算法的微电网优化调度
|
11月前
|
机器学习/深度学习 并行计算 算法
图像预处理库CV-CUDA开源了,打破预处理瓶颈,提升推理吞吐量20多倍
图像预处理库CV-CUDA开源了,打破预处理瓶颈,提升推理吞吐量20多倍
150 0
|
11月前
|
编译器 C++ 智慧交通
智慧交通day01-算法库01:numba
numba是一个用于编译Python数组和数值计算函数的编译器,这个编译器能够大幅提高直接使用Python编写的函数的运算速度。
120 0
|
机器学习/深度学习 存储 并行计算
【ASPLOS 2022】机器学习访存密集计算编译优化框架AStitch,大幅提升任务执行效率
近日,关于机器学习访存密集计算编译优化框架的论文《AStitch: Enabling A New Multi-Dimensional Optimization Space for Memory-Intensive ML Training and Inference on Modern SIMT Architectures》被系统领域顶会ASPLOS 2022接收。
【ASPLOS 2022】机器学习访存密集计算编译优化框架AStitch,大幅提升任务执行效率
|
并行计算 定位技术
SLAM各种并行加速方法
SLAM各种并行加速方法
SLAM各种并行加速方法
AVX 指令集并行技术优化中值滤波
AVX 指令集并行技术优化中值滤波
158 0
AVX 指令集并行技术优化中值滤波
|
并行计算 openCL 算法
OpenCV算法加速(3)使用OpenCL
OpenCV算法加速(3)使用OpenCL
1336 0