Opencl图片旋转编写
来源:互联网 发布:淘宝上买黄金可靠吗 编辑:程序博客网 时间:2024/05/23 19:14
kernel函数代码为:
图像旋转是指把定义的图像绕某一点以逆时针或顺时针方向旋转一定的角度,通常是指绕图像的中心以逆时针方向旋转。
假设图像的左上角为(left, top),右下角为(right, bottom),则图像上任意点(x0, y0)绕其中心(xcenter, ycenter)逆时针旋转angle角度后,新的坐标位置(x′, y′)的计算公式为:
xcenter = (right - left + 1) / 2 + left;
ycenter = (bottom - top + 1) / 2 + top;
x′ = (x0 - xcenter) cosθ - (y0 - ycenter) sinθ + xcenter;
y′ = (x0 - xcenter) sinθ + (y0 - ycenter) cosθ + ycenter;
__kernel void image_rotate( __global uchar * src_data, __global uchar * dest_data, //Data in global memory
int W, int H, //Image Dimensions
float sinTheta, float cosTheta ) //Rotation Parameters
{
//Thread gets its index within index space
const int ix = get_global_id(0);
const int iy = get_global_id(1);
int xc = W/2;
int yc = H/2;
int xpos = ( ix-xc)*cosTheta - (iy-yc)*sinTheta+xc;
int ypos = (ix-xc)*sinTheta + ( iy-yc)*cosTheta+yc;
if ((xpos>=0) && (xpos< W) && (ypos>=0) && (ypos< H)) //Bound Checking
{
dest_data[ypos*W+xpos]= src_data[iy*W+ix];
}
}
src_data为原始图像(灰度图)数据,dest_data为旋转后的图像数据。W、H分别为图像的高度和宽度。sinTheta和cosTheta是旋转参数。我在代码中实现了旋转90度,所以sinTheta为1,cosTheta为0,大家可以尝试其它的值
- Opencl图片旋转编写
- OpenCL之图片旋转的实现
- 用C#编写图片如何旋转
- 使用CodeBlocks编写OpenCL程序
- OpenCL 第7课:旋转变换(1)
- OpenCL 第8课:旋转变换(2)
- 图像旋转在opencL 实现方法
- 图片旋转
- 图片旋转
- 旋转图片
- 图片旋转
- 图片旋转
- 旋转图片
- 旋转图片
- 图片旋转
- 图片旋转
- 图片旋转
- 图片旋转
- HDU 1988 Cube Stacking (数据结构-并查集)
- GITHUB使用总结
- ZOJ 3508 贪心算法
- Centos配置网络
- CDOJ-#855 分割包围(二分查找)
- Opencl图片旋转编写
- DNS解析
- 在Android平台上编译faad2
- 射频电路设计实录前言与第一章,目标市场分析
- hdu 4876 ZCC loves cards
- 使用Windbg 调试.Net程序
- 基于Chrome,foxfire(WeiKit内核)浏览器的密码安全控件插件开发(NPAPI)
- JavaFX文档(8)开始JavaFX之旅——理解JavaFX架构
- Redmine使用OpenLDAP认证