问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

opencv和opencl有什么区别

发布网友 发布时间:2022-04-22 09:49

我来回答

2个回答

懂视网 时间:2022-04-12 15:55

上文说到了没有ROI的情况下怎么优化add,现在看看有roi的情况。 ROI是opencv里面的一个特性,也可以说是图像处理库都有的特性,它的意思是对于整个一幅图像,只处理被ROI框起来的那一块,可以看做是一个mask。如果不注重性能,最简单的方法就是加上一个offse

上文说到了没有ROI的情况下怎么优化add,现在看看有roi的情况。

ROI是opencv里面的一个特性,也可以说是图像处理库都有的特性,它的意思是对于整个一幅图像,只处理被ROI框起来的那一块,可以看做是一个mask。如果不注重性能,最简单的方法就是加上一个offset即可

__kernel void matrix_add(__global uchar* src1,__global uchar* src2, __global uchar* dst, int rows, int cols,int src1_step,int src2_step,int dst_step,int src1_offset, int src2_offset, int dst_offset)

{

int x=get_global_id(0);

int y=get_global_id(1);

if(x

dst[mad24(y,dst_step,x+dst_offset)]=src1[mad24(y,src1t_step,x+src1_offset)]+src2[mad24(y,src2_step,x+src2_offset)];

}

但是在每次读4个点的时候不能这么做,因为这有对齐问题。比如一个矩阵是17列1行,ROI设置的是后16个点,起始地址就不会是4的整数倍,这样在指针强制转换的时候会出现未定义的情况,结果是错的。除此之外,长度不是4的倍数也会出现问题,所以要使用一些技巧。一个办法是可以先强制对齐地址,多读一些数据,判断是否是需要的,不是需要的就扔掉

__kernel void matrix_add (__global uchar *src1, int src1_step, int src1_offset,
__global uchar *src2, int src2_step, int src2_offset,
__global uchar *dst, int dst_step, int dst_offset,
int rows, int cols, int dst_step1)
{
int x = get_global_id(0);
int y = get_global_id(1);

if (x < cols && y < rows)
{
x = x << 2;

#define dst_align (dst_offset & 3)
int src1_index = mad24(y, src1_step, x + src1_offset - dst_align);
int src2_index = mad24(y, src2_step, x + src2_offset - dst_align);

int dst_start = mad24(y, dst_step, dst_offset);
int dst_end = mad24(y, dst_step, dst_offset + dst_step1);
int dst_index = mad24(y, dst_step, dst_offset + x & (int)0xfffffffc);

uchar4 src1_data = vload4(0, src1 + src1_index);
uchar4 src2_data = vload4(0, src2 + src2_index);

uchar4 dst_data = *((__global uchar4 *)(dst + dst_index));
short4 tmp = convert_short4_sat(src1_data) + convert_short4_sat(src2_data);
uchar4 tmp_data = convert_uchar4_sat(tmp);

dst_data.x = ((dst_index + 0 >= dst_start) && (dst_index + 0 < dst_end)) ? tmp_data.x : dst_data.x;
dst_data.y = ((dst_index + 1 >= dst_start) && (dst_index + 1 < dst_end)) ? tmp_data.y : dst_data.y;
dst_data.z = ((dst_index + 2 >= dst_start) && (dst_index + 2 < dst_end)) ? tmp_data.z : dst_data.z;
dst_data.w = ((dst_index + 3 >= dst_start) && (dst_index + 3 < dst_end)) ? tmp_data.w : dst_data.w;

*((__global uchar4 *)(dst + dst_index)) = dst_data;
}
}

由于为了处理对齐多出来很多额外的操作,所以速度并不是理论上的4倍,而是2倍多一点

热心网友 时间:2022-04-12 13:03

这三个都是api,opencl是gpu通用编程的api,就是用显卡做常规的数*算,而非处理图形。opengl 于是directx 3d类似,都是图形api,用于编程调用显卡画图。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么鉴别匡威真假鉴别鉴别匡威真假的方法与技巧 洛阳小碗汤怎么做 酥肉丸子汤如何烹饪简单而又不失美味? 直通车产出比多少不亏?产出比低怎么调整? 淘宝直通车投产比多少才是盈利?怎么提升? 车打不着拧钥匙没反应 车打火的钥匙拧不动 微信关闭时后台还在图标上还有个小锁什么意思 坦克世界闪击战电脑需求配置玩坦克世界电脑配置要达到什么标准_百度... 坦克世界对电脑配置要求高不高玩坦克世界电脑需要什么配置要求 坦克世界对电脑的配置要求是多少坦克世界配置要求 蝙蝠侠中的小丑为什么会变成那个恶魔的样子。?? 怎么写API程序? 如何开发网站API程序 谁知道杜甫《闻官军收河南河北》 和他的诗意 奥斯卡电影《小丑》为何能够成为经典,长盛不衰? 什么是OpenCL?面向FPGA的OpenCL有何优点 杜甫:&lt;别房太尉墓&gt;的翻译和评价 都有什么样的小丑? 阀门中API 602, CL 1500, BE,BE是什么意思? 在武汉市新洲区怎么办理个体营业执照 旧唐书·杜甫传中杜甫被免职的原因是什么 在现实中,这些小丑是什么样子 阅读《旧唐书·杜甫传》,说说杜甫被免职的原因是什么? 嘉实多5W-30A5,A5是什么意思 武汉武昌区徐东一路的个体户在哪里办理营业执照 英雄联盟里的小丑都削弱了哪些?以前是什么样的? 唐代诗人杜甫简介文言文? 如何查看支付宝年度账单分析 APlSL/CL是什么机油? 小丑是什么样的人? lol刚出的小丑是什么样的 GPU技术中,常见的API技术有哪几种? 蝙蝠侠中的小丑说经历了最别惨的一天,所有人都会变成我这样子 404 Not Found opencl有什么用 求穿越到汉朝的小说,最好是中前期的 OpenCL现在都支持哪些并行设备 404 Not Found OpenCL,OpenGL和DirectX的区别是什么 API 简单解释下意思 梦见老师上课提问我 求穿越汉朝小说 api150以上是什么意思 关于汉朝的穿越小说 哪位阀门类高手给翻翻,谢谢啦 涓什么意思?近义词和反义词是什么?英文翻译是什么? 有没有汉代穿越 好看的小说 java连接mysql数据库,可以插入数字。但是插入汉字会提示Unknown column &#39;寰愬织寮? in &#39;field list&#39; 梦见自己是学生在教室上课,校长是老师? 有没有穿越的汉朝的小说