【CUDA】BGR2GRAY

CUDA实现BGR2GRAY及性能测试

最近刚接触CUDA,先写一些简单的示例练习下。

在图像处理中,三通道彩色图像BGR到灰度图Gray,常见的一般有两种计算方式,一种是基于浮点数计算,一种是基于性能优化的通过移位的整数计算。

浮点数计算公式为: gray = 0.1140 * B  + 0.5870 * G + 0.2989 * R

整数计算公式为: gray = (1868 * B + 9617 * G + 4899 * R) >> 14 ,1868从二进制的角度看,向右移位14位,相当于1868\div 2^{14}=1868\div 16384\approx 0.1140,以此类推。

下面的代码主要参考[2]进行修改得到:

头文件:funset.hpp

#include <cuda_runtime.h> // For the CUDA runtime routines (prefixed with "cuda_")
#include <device_launch_parameters.h>
#include <cstdlib>
#include <vector>


int bgr2gray_cpu(const unsigned char* src, int width, int height, unsigned char* dst);
int bgr2gray_gpu(const unsigned char* src, int width, int height, unsigned char* dst);

基于CPU的BRG2GRAY:bgr2gray.cpp

#include "funset.hpp"
 
int bgr2gray_cpu(const unsigned char* src, int width, int height, unsigned char* dst)
{

	const int R2Y{ 4899 }, G2Y{ 9617 }, B2Y{ 1868 }, yuv_shift{ 14 };
 
	for (int y = 0; y < height; ++y) {
		for (int x = 0; x < width; ++x) {
			dst[y * width + x] = (unsigned char)((src[y*width * 3 + 3 * x + 0] * B2Y +
				src[y*width * 3 + 3 * x + 1] * G2Y + src[y*width * 3 + 3 * x + 2] * R2Y) >> yuv_shift);
		}
	}
 
 
	return 0;
}

基于GPU的BRG2GRAY:bgr2gray.cu

#include "funset.hpp"
 
/* __global__: 函数类型限定符;在GPU设备上运行;在主机端CPU调用,计算能力3.2及以上可以在
设备端调用;声明的函数的返回值必须是void类型;对此类型函数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值