[OpenCV] GpuMat and Mat, compare cvtColor perforemence
Introduction
I am going to measure the performence of my two GT650M and compare GPU with CPU version.
code segments
#include <iostream>
#include <omp.h>
using namespace std;
#include <cuda_runtime.h>
#include <opencv2/opencv.hpp>
#include <opencv2/gpu/gpu.hpp>
using namespace cv;
#define TB__(A) int64 A; A = cv::getTickCount()
#define TE__(A) cout << #A << " : " << 1.E3 * double(cv::getTickCount() - A)/double(cv::getTickFrequency()) << "ms" << endl
Vec3b max(cv::Mat &A, cv::Mat &B){
int width = A.cols;
int height = A.rows;
Vec3b me(0,0,0);
for (int y = 0; y < height; y++){
for (int x = 0; x < width; x++){
Vec3b p0 = A.at<Vec3b>(y,x);
Vec3b p1 = B.at<Vec3b>(y,x);
Vec3b pixel;
pixel[0] = p1[0]>p0[0]? p1[0]-p0[0]:p0[0]-p1[0];
pixel[1] = p1[1]>p0[1]? p1[1]-p0[1]:p0[1]-p1[1];
pixel[2] = p1[2]>p0[2]? p1[2]-p0[2]:p0[2]-p1[2];
if (me[0] < pixel[0])
me[0] = pixel[0];
if (me[1] < pixel[1])
me[1] = pixel[1];
if (me[2] < pixel[2])
me[2] = pixel[2];
}
}
return me;
}
#define REPEATES 10000
int main(){
// please ensure that you have at least two Nvidia GPUs on your mathorboad.
cv::Mat cpu_src = imread("86.jpg");
cv::Mat cpu_dst;
cv::Mat gpu_dst[2];
TB__(cpu_cvt);
#pragma omp parallel for num_threads(4)
for (int k = 0; k < REPEATES; k++)
cv::cvtColor(cpu_src, cpu_dst, CV_BGR2Lab);
TE__(cpu_cvt);
TB__(gpu_cvt);
#pragma omp parallel num_threads(2)
{
int id = omp_get_thread_num();
cv::gpu::setDevice(id);
cv::gpu::GpuMat dev_src;
cv::gpu::GpuMat dev_dst;
dev_src.upload(cpu_src);
//#pragma omp master
//TB__(gpu_omp_dev);
#pragma omp for
for (int k = 0; k < REPEATES; k++){
dev_src.upload(cpu_src);
cv::gpu::cvtColor(dev_src, dev_dst, CV_BGR2Lab);
dev_dst.download(gpu_dst[id]);
}
cudaDeviceSynchronize();
}
TE__(gpu_cvt);
cout << cv::sum(cpu_dst - gpu_dst[0]) << endl;
cout << cv::sum(cpu_dst - gpu_dst[1]) << endl;
cout << cv::sum(gpu_dst[0] - gpu_dst[1]) << endl;
cout << endl;
cout << max(cpu_dst, gpu_dst[0]) << endl;
cout << max(cpu_dst, gpu_dst[1]) << endl;
return 0;
}
[OpenCV] GpuMat and Mat, compare cvtColor perforemence的更多相关文章
- opencv学习之颜色空间转换cvtColor()
我们生活中大多数看到的彩色图片都是RGB类型,但是在进行图像处理时,需要用到灰度图.二值图.HSV.HSI等颜色制式,opencv提供了cvtColor()函数来实现这些功能.首先看一下cvtColo ...
- OpenCV不同类型Mat的at方法访问元素时该如何确定模板函数的typename(转)
自从OpenCV推出了Mat后越来越像是Matlab了,使用起来方便了很多,但是,在用at方法访问Mat时,如何选用合适的typename类型来访问相应的Mat元素是个头疼的问题. 比如: int H ...
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
原文:OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解 Title : cv::Mat depth/dims/channels ...
- Visual Studio 控制台应用程序 同时使用OpenCV和matlab mat文件操作
matalb具有灵活的图像处理,代码编写起来简洁而高效.而OpenCV具有很多成熟的计算机视觉算法,能够处理很多实时的识别处理等问题,而且代码运行起来效率很高.所以如何结合两者之间的优点,是让很多学术 ...
- 【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization
[编程开发]opencv实现对Mat中某一列或某一行的元素进行normalization 标签: [编程开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259 ...
- 第二章:Opencv核心類Mat
Opecv就是做計算機視覺,就是讲图片转换成计算机所能识别的数据 Mat类中由大量的内联函数,主要就是用于提高速度. 一般类型都用rgb,存的时候用CV_8UC3.create函数一般会把原来的空间释 ...
- opencv yuv420与Mat互转
项目用到opencv 融合图片的功能,经过一天的调试,达到预期目标,先将如何调用opencv库实现YUV42与Mat互转记录下来. 一.下载opencv编译的库下载地址是:http://opencv. ...
- opencv中的Mat类型
Mat类型主要是跟matlab中的数据类型一样.故用起来很方便. Mat最大的优势跟STL很相似,都是对内存进行动态的管理,不需要之前用户手动的管理内存,对于一些大型的开发,有时候投入的lpImage ...
- OpenCV教程二 - Mat对象与它各种用法
学习OpenCV大家都会遇到一个对象叫做Mat,此对象非常神奇,支持各种操作.很多初学者因此被搞得头晕脑胀,它各种用法太多太杂,搞得初学者应接不暇,感觉有心无力.无处下手之感.这里我们首先要正本清源, ...
随机推荐
- CentOS 7 安装serverjre 9
1. 首先去官网查询最新的jre的下载地址,然后用wget命令下载. 2. 创建安装目录 sudo mkdir -p /usr/local/java 3. 解压文件到安装目录 sudo tar -z ...
- C#之Message(转)
一.消息概述 Windows下应用程序的执行是通过消息驱动的.消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的编程语言是如何封装消息的原理. 什么是消息(Message) 消息就是通知和命令. ...
- 学习ASP.NET Core Razor 编程系列六——数据库初始化
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- [SDOI 2008]沙拉公主的困惑
Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...
- BZOJ 4372 烁烁的游戏
Description 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠.题意:给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠.烁烁他每次会跳到一个节点u,把周围与他距离不超过d的节点各吸引出w只皮皮 ...
- UpdateAfterEvent
10月3日,在杭州市西湖景区,一只小松鼠不停地接受一道道食物,花生.玉米.饼干,可谓来者不拒,憨态可掬的模样吸引了众多围观者...Description 小松鼠打了10个小时的游戏,一脸满足.却发 ...
- Codeforces Round #430 C. Ilya And The Tree
Ilya is very fond of graphs, especially trees. During his last trip to the forest Ilya found a very ...
- 2015 多校联赛 ——HDU5299(树删边)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission ...
- 【集训第四天·继续刷题】之 lgh怒刚ypj
继续水题,终于完全掌握了伸展树了,好心痛QAQ. 1.codevs1343 蚱蜢 区间最大值查询+单点移动 最大值查询维护一个mx数组就行,单点移动么,先删除在插入 CODE: /* PS: 比较ma ...
- [bzoj4161]Shlw loves matrix I
来自FallDream的博客,未经允许,请勿转载,谢谢. 给定数列 {hn}前k项,其后每一项满足 hn = a1*h(n-1) + a2*h(n-2) + ... + ak*h(n-k) 其中 a1 ...