Release 模式

--------------------------------------------------
smooth gaussian : 2
cvtColor CV_BGR2Lab : 3
get_psnr : 16
convertTo CV_8U: 6
absdiff: 2
threshold: 0
dilate 20: 3
fill_hole : 3
bitwise_xor : 0
shape : 0
copyTo 3 channels : 0
select_color : 14
smooth median : 1
gen_bgra : 3
cal_color : 4
pic_mix : 22
110ms
--------------------------------------------------

smooth gaussian : 5

smooth median : 5

cvtColor CV_BGR2Lab : 3
accumulateWeighted : 11
convertTo CV_8U: 7
absdiff: 2
threshold: 0
dilate 20: 8
fill_hole : 1
bitwise_xor : 0

shape : 0

copyTo 3 channels : 0
select_color : 129
smooth median : 5
gen_bgra : 0
cal_color : 4
pic_mix : 23

gen_bgra : 3

all : 317ms

1.

float , int , char 的 加、乘、移位运算的耗时整理,   循环周期为 1000*1000*100

Debug模式:

int 加法:194
int 加两次:391
float 加法:1237
float 乘法:551

Release模式

int 加1次:35
int 加2次:37(分1个循环)

int 加2次:67 (2个循环)
float 加法:292
float 乘法:367

int型的加减乘除移位

右移8位 63ms           -----最高效

除以256 97ms

除以256.0 368ms

除以255 144ms

除以255.0 1165ms

32位和8位整形的运算时间大致相等---------所以用32位处理图像数据会更快。

i*7 和(i<<2) + (i<<1) + i 的时间大致相等,所以不需要把整形的乘法改为移位,但是一定要把整形的除法改为移位。

unsigned char [1920*1080]  分配内存 100 000次, 总耗时313ms

int [1920*1080]  分配内存 100 000次, 总耗时413ms

2.  opencv遍历Mat中的short数据

   for for   {   short * param = (short*)(res_map.data + sizeof(short)*of3);  }    耗时4ms (DEBUG模式)

  short * param = &((short*)res_map.data)[of3];   耗时4ms (DEBUG模式)  与上述相同

  Vec3s& param = res_map.at<Vec3s>(__j,__i);   耗时75 ms  (DEBUG模式)------大循环里千万不要用这种方式访问图像

short * param = &((short*)res_map.data)[of3];
short _index = param[0];
short _i = param[1];
short _j = param[2];

----耗时7ms

short * param = &((short*)res_map.data)[of3];
short& _index = param[0];
short& _i = param[1];
short& _j = param[2];

----short用引用耗时7ms

继续增加语句  int _of3 = (_j*wh+i)*3;  耗时8.4ms

继续增加语句 uchar* pixel = &mats[_index]->data[_of3];    ------31ms   麻痹的,大循环里千万不要对vector进行随机访问!!!

pixel 改成这种方法获取  uchar * pixel = &mats[_index].data[of3];     ---- 10ms

继续增加语句

res.data[of3] = pixel[0];
res.data[of3 + 1] = pixel[1];
res.data[of3 + 2] = pixel[2];
of3 += 3;

--------耗时20ms (DEBUG)

上述赋值方法改为

uchar * data = &res.data[of3];
data[0] = pixel[0];
data[1] = pixel[1];
data[2] = pixel[2];

--------耗时20ms (DEBUG)  耗时并未改变

改为

uchar * data = &res.data[of3];

memcpy( data,pixel,3 );  18.1ms

改为

uchar * data = &res.data[of3];

memcpy( data,pixel,4 );   ------18.2ms 耗时减少, 可能是由于拷贝的是32位数据的原因?

使用一个循环 for (int j = 0; j != size; ++j)     ----18.5ms    和上面一样, 并不能减少耗时

3. mix_pix   耗时:

3.1   耗时 36 ms

int _res_y = (fg_y*res_a + bg_y*_255_a)>>8;
int _res_cb = (fg_cb*res_a + bg_cb*_255_a) >> 8;
int _res_cr = (fg_cr*res_a + bg_cr*_255_a) >> 8;

3.2  耗时36 ms

int _res_y = (res_a*(fg_y - bg_y) >> 8) + bg_y;
int _res_cb = (res_a*(fg_cb - bg_cb) >> 8) + bg_cb;
int _res_cr = (res_a*(fg_cr - bg_cr) >> 8) + bg_cr;

3.3   注释mix_pix 代码  耗时  28ms

3.4 注释 mix_pix 函数里面的所有代码   29 ms

3.5 注释 int _res_y = (fg_y*res_a + bg_y*_255_a)>>8;    耗时 33ms

3.6 加CLAMP 比不加CLAMP 慢3-4 ms

4. convertT

  src.convertTo(src_16s, CV_16SC3);     1080片:  3 ms

  src.convertTo(src_16s, CV_32FC3);   6ms

    src.convertTo(src_16s, CV_32SC3);   6ms

  

opencv 一些函数的耗时计算的更多相关文章

  1. opencv-6-图像绘制与opencv Line 函数剖析

    opencv-6-图像绘制与opencv Line 函数剖析 opencvc++qt 开始之前 越到后面, 写的越慢, 之前还抽空去看了下 学堂在线那篇文章提供的方法, 博客第一个人评论的我, 想想还 ...

  2. Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 为一个”模型定义”函数返回一个计算列

    11-3. 为一个”模型定义”函数返回一个计算列 问题 想从”模型定义”函数里返回一个计算列 解决方案 假设我们有一个员工(Employee)实体,属性有: FirstName, LastName,和 ...

  3. opencv 霍夫变换 实现图片旋转角度计算

    在OCR实际开发中,证件照采集角度有很大的偏差,需要将图片进行旋转校正, 效果图: 在应用中发现应该加入高斯模糊,可以极大减少误差线条. 知道线条后 通过求斜率 得旋转角度 .(x1-x2)/(y1- ...

  4. C/C++多参数函数参数的计算顺序与压栈顺序

    一.前言 今天在看Thinking in C++这本书时,书中的一个例子引起了我的注意,具体是使用了下面这句 单看这条语句的语义会发现仅仅是使用一个简单的string的substr函数将所得子串pus ...

  5. Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数

    Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数 不再通过遍历,对数组中的元素进行运算,利用frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数 ...

  6. 【记录一个问题】macos下lldb调试opencv的一个程序,出现“failed to load objfile for”错误,并且无法调试进入opencv的函数

    opencv编译使用了Debug版本,打开了BUILD_WITH_DEBUG_INFO=ON选项. 发现问题后,我又在CMAKE_CXX_FLAGS_DEBUG中设置为 -g -ggdb3,在CMAK ...

  7. Golang记录、计算函数执行耗时、运行时间的一个简单方法

    // 写超时警告日志 通用方法   func TimeoutWarning(tag, detailed string, start time.Time, timeLimit float64) {    ...

  8. 【麦子学院】OpenCV教程函数总结

    个自带样例. parter 1: No1. adaptiveskindetector.cpp 利用HSV空间的色调信息的皮肤检測,背景不能有太多与肤色相似的颜色.效果不是特别好. No2. bagof ...

  9. opencv ---getRotationMatrix2D函数

    getRotationMatrix2D函数 主要用于获得图像绕着 某一点的旋转矩阵  Mat getRotationMatrix2D(Point2f center, double angle, dou ...

随机推荐

  1. rsync+inotify 实时双向同步

    前言 在遇到需要 nginx 负载均衡,承受较高并发的情况,同时会有双机相同目录内容须保持一致的需求 rsync+inotify 是一个不错的解决方案,相较于 rsync+sersync 在处理大量文 ...

  2. 图解Python 【第五篇】:面向对象-类-初级基础篇

    由于类的内容比较多,分为类-初级基础篇和类-进阶篇 类的内容总览图: 本节主要讲基础和面向对象的特性 本节内容一览图: 前言总结介绍: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 ...

  3. centos6里面装zabbix(五)

    今天说使用ICMP ping监控server与agent端的网络状态 今天要使用的是fping,这个软件包需要去官网下载,官网地址:http://www.fping.org/.现在的最新版是4.0 第 ...

  4. PHP格式化数字和SMARTY格式化数字的方法

    PHP格式化: $num="3";$format="%06d";  //6是位数,这里有6位数,0是不足6位的补0$a=sprintf($format,$num ...

  5. centos7安装redis3.2.5集群

    安装参照     https://blog.csdn.net/mingliangniwo/article/details/54600640  https://blog.csdn.net/u013820 ...

  6. 【JVM学习笔记】Class.forName方法学习

    三个参数的版本的源代码如下 doc文档翻译 使用给定的类加载器(即第3个参数)返回与具有给定字符串名称(第1个参数)的类或接口关联的Class对象.给定类或接口的完全限定名称(以getName返回的相 ...

  7. 硬盘相关合集,以及LVM操作实践

    1. 机器装有两块硬盘,重装系统只找到一块盘,如何解决? 正常装完系统后,运行: a. lsblk查看硬盘信息,这里可以发现还没有使用的另一块盘. b. fdisk或parted给硬盘分区,取决于硬盘 ...

  8. SqlServer:SqlServer(服务器磁盘监控,创建管理员账号分配权,添加链接服务器,查询CPU,查询内存)

    1.服务器磁盘监控 (1)总链接服务上开启所有链接服务器的RPC: ----------------------总链接服务器上面,开启每个服务器的RPC --exec sp_serveroption ...

  9. Lua字符串及模式匹配

    字符类基础函数举例介绍: string.len( ‘string’ ) string.lower( ‘string’ ) string.upper( ‘string’ ) string.rep( ‘a ...

  10. Linux下查看文件编码及批量修改编码

    查看文件编码在Linux中查看文件编码可以通过以下几种方式:1.在Vim中可以直接查看文件编码:set fileencoding即可显示文件编码格式.如果你只是想查看其它编码格式的文件或者想解决用Vi ...