多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > OpenCL之圖片旋轉的實現

OpenCL之圖片旋轉的實現

來源:程序員人生   發布時間:2015-05-13 08:51:11 閱讀次數:4204次

  • 原理
  • 前期
  • kernel
  • 配置文件
  • 效果
  • 參考

這里做的就是使用OpenCL對圖象旋轉90度,也算是1個比較入門級別的程序。希望對大家有所幫助吧,看著看著這些代碼就熟習了。

原理

圖象旋轉是指把定義的圖象繞某1點以逆時針或順時針方向旋轉1定的角度,通常是指繞圖象的中心以逆時針方向旋轉。假定圖象的左上角為(left, top),右下角為(right, bottom),則圖象上任意點(x0, y0) 繞其中心(xcenter, ycenter) 逆時針旋轉angle 角度后,新的坐標位置(x′, y′) 的計算公式為:

公式

前期

需要對圖象進行處理,那末在這里介紹1個庫給大家:FreeImage。
不熟習的請看:請點這里。
使用這個庫的方法:(通用方法,極有效)

  • 屬性->C/C++->常規->附加包括目錄:添加.h的路徑。

  • 鏈接器->常規->附加庫目錄: 添加lib路徑。

  • 鏈接器->輸入->附加依賴項: 添加需要的lib名稱。

  • 將dll文件放入exe路徑下。

kernel

#pragma OPENCL EXTENSION cl_amd_printf : enable __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]; } }

我們把這個東西和CPU串行處理比較1下可以得到以下:

//CPU旋轉圖象:使用CPU來旋轉圖片 void cpu_rotate(unsigned char* inbuf, unsigned char* outbuf, int w, int h,float sinTheta, float cosTheta) { int i, j; int xc = w/2; int yc = h/2; for(i = 0; i < h; i++) { for(j=0; j< w; j++) { int xpos = ( j-xc)*cosTheta - (i-yc)*sinTheta+xc; int ypos = (j-xc)*sinTheta + ( i-yc)*cosTheta+yc; if(xpos>=0&&ypos>=0&&xpos<w&&ypos<h) outbuf[ypos*w + xpos] = inbuf[i*w+j]; } } }

對照以后我們發現OpenCL寫kernel的時候循環沒有了,取而代之的就是給出global_id便可。

配置文件

這里還觸及到1些圖片的操作,具體請看FreeImage的使用。

#include "stdafx.h" #include <CL/cl.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <iostream> #include <fstream> #include "gFreeImage.h" using namespace std; #define NWITEMS 4 #pragma comment (lib,"OpenCL.lib") #pragma comment (lib,"FreeImage.lib") //把文本文件讀入1個string中,其實就是把運行程序傳給從機 int convertToString(const char *filename, std::string& s) { size_t size; char* str; std::fstream f(filename, (std::fstream::in | std::fstream::binary)); if(f.is_open()) { size_t fileSize; f.seekg(0, std::fstream::end); size = fileSize = (size_t)f.tellg(); f.seekg(0, std::fstream::beg); str = new char[size+1]; if(!str) { f.close(); return NULL; } f.read(str, fileSize); f.close(); str[size] = ' 主站蜘蛛池模板: 亚洲人网站 | 国产永久免费爽视频在线 | jizzjizz黄色| xxxxxx国产精品视频 | 羞羞视频免费入口 | 国产一级淫片a免费播放口欧美 | 欧美freesex10一|3 | 亚洲经典在线观看 | aa级国产女人毛片好多水 | 黄色wwwcom| 国产一区二区亚洲精品天堂 | 理论片亚洲 | 亚洲国产成人久久综合一区 | 亚洲欧美日韩中文字幕一区二区三区 | 日韩最新视频一区二区三 | 欧美一区二区三区免费 | 中文字幕在线看视频一区二区三区 | 中文字幕在线二区 | 91精品久久久久久久久久 | 性感美女视频免费网站午夜 | 中文字幕在线视频网站 | xxxx性xxxx| 最近免费中文字幕大全高清片 | 国内精品一区二区三区αv 国内精品一区二区三区东京 | 欧美自拍视频在线 | 欧美美女free | 国产毛片不卡 | 夜夜精品视频一区二区 | 武则天a级在线观看 | 欧美视频福利 | 最近中文字幕免费mv视频8 | 99精品小视频 | 国内精品免费视频精选在线观看 | 一级做a爰片性色毛片视频图片 | 免费成年人视频在线观看 | 午夜色综合 | 国产精品国产三级国产无毒 | 欧美一二区视频 | 99干99| 伊人情人综合 | 精品久久久久久中文字幕女 |