CUDA+OpenCV 绘制朱利亚(Julia)集合图形
Julia集中的元素都是经过简单的迭代计算得到的,很适合用CUDA进行加速。对一个600*600的图像,需要进行360000次迭代计算,所以在CUDA中创建了600*600个线程块(block),每个线程块包含1个线程,并行执行360000次运行,图像的创建和显示通过OpenCV实现:
#include "cuda_runtime.h"
#include <highgui.hpp>using namespace cv;#define DIM 600 //图像长宽struct cuComplex
{float r;float i;__device__ cuComplex(float a, float b) : r(a), i(b) {}__device__ float magnitude2(void){return r * r + i * i;}__device__ cuComplex operator*(const cuComplex& a){return cuComplex(r*a.r - i*a.i, i*a.r + r*a.i);}__device__ cuComplex operator+(const cuComplex& a){return cuComplex(r + a.r, i + a.i);}
};__device__ int julia(int x, int y)
{const float scale = 1.5;float jx = scale * (float)(DIM / 2 - x) / (DIM / 2);float jy = scale * (float)(DIM / 2 - y) / (DIM / 2);cuComplex c(0.25, 0.010);cuComplex a(jx, jy);int i = 0;for (i = 0; i < 200; i++){a = a * a + c;if (a.magnitude2() > 1000)return 0;}return 1;
}__global__ void kernel(unsigned char *ptr)
{// map from blockIdx to pixel positionint x = blockIdx.x;int y = blockIdx.y;int offset = x + y * gridDim.x;// now calculate the value at that positionint juliaValue = julia(x, y);ptr[offset * 3 + 0] = 0;ptr[offset * 3 + 1] = 0;ptr[offset * 3 + 2] = 255 * juliaValue;
}// globals needed by the update routine
struct DataBlock
{unsigned char *dev_bitmap;
};int main(void)
{DataBlock data;cudaError_t error;Mat image = Mat(DIM, DIM, CV_8UC3, Scalar::all(0));data.dev_bitmap = image.data;unsigned char *dev_bitmap;error = cudaMalloc((void**)&dev_bitmap, 3 * image.cols*image.rows);data.dev_bitmap = dev_bitmap;dim3 grid(DIM, DIM);kernel << <grid, 1 >> > (dev_bitmap);error = cudaMemcpy(image.data, dev_bitmap,3 * image.cols*image.rows,cudaMemcpyDeviceToHost);error = cudaFree(dev_bitmap);imshow("CUDA For Julia | c(0.25, 0.010)", image);waitKey();
}
c(-0.8,0.156):
c(-0.85,0.06):
c(-0.305,0.60):
c(0.25,0.010):
CUDA+OpenCV 绘制朱利亚(Julia)集合图形相关推荐
- Python实现朱利亚集算法及完整源码
Python实现朱利亚集算法及完整源码 朱利亚集是一种数学图形,它的形态多变,美丽而神秘.在计算机绘图领域,朱利亚集被广泛应用,并因此成为了数字艺术的重要组成部分. 在本文中,我将向大家介绍如何使用P ...
- 使用Python,OpenCV对图像进行亚像素点检测,并拟合椭圆进行绘制
这篇博客将介绍如何使用Python,OpenCV对图像进行亚像素检测,并对亚像素点进行椭圆拟合绘制. 1. 效果图 原始图上绘制拟合椭圆 VS 原始图上绘制拟合椭圆及亚像素点绘制随机半径及颜色的圆 V ...
- NBA名人堂之-朱利叶斯·欧文|埃尔文·海耶斯|多尔夫·谢伊斯|鲍勃·佩蒂特|戴夫·冰
朱利叶斯·欧文 英文名:Julius Erving 出生:1950年2月22日 身高:2.01米 NBA生涯:1976-1983年 司职:前锋 主要荣誉: ①1983年获NBA总冠军: ②5次入选NB ...
- 使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果
使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果 1. 效果图 2. 源码 参考 这篇博客将使用python,opencv绘制调色板及圆形来模拟霓虹的渐变效果. 1. 效果图 可以构 ...
- 计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~
计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~示例效果如下: 原图: 示例代码如下: #!/usr/bin/env python3import cv2def sort_contours(cnts ...
- OpenCV绘制等高线Contours的实例(附完整代码)
OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 #include "opencv2/imgproc.hpp ...
- [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 中班机器人教室设计方案_奇思妙想一起玩,机器人来了安格利亚东郡生态幼儿园亲子活动...
奇思妙想一起玩 机器人总动员亲子活动 课程起源 有一天午休起床几个小女生正排队梳辫子,因为需要等待,孩子们比较无聊就在看教室的摆件,突然小朋友们就用机器人的语调开始对话,我听到后感觉很有意思也用机器人 ...
- 变量命名 – 匈利亚命名法则 - C语言零基础入门教程
目录 1.属性部分 2.类型部分 3.描述部分 4.MFC.句柄.控件及结构的命名规范 5.变量命名规范 6.库标识符命名法 7.举例 8.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ ...
- Matlab制作朱利表
朱利判据 其中 {bn−k=an−k−ana0∗akcn−k=bn−k−bnb0∗bk...qn−k=pn−k−pnp0∗pk\begin{cases} b_{n-k}=a_{n-k}-\frac{a ...
最新文章
- sharepoint 2010 如何使用sharepoint多媒体视频播放media webpart功能
- Js文本溢出自动添加省略号ellipsis
- 用Delphi进行word开发
- c++类指针赋值表达式必须是可修改的左值_C++进阶教程系列:全面理解C++中的类...
- python导入csv报错_Python Pandas read_csv报错
- 使用Spring编写和使用SOAP Web服务
- 本地上传代码到github仓库
- WiFi穿透能力甩对手两堵墙 荣耀9X新特性令人侧目
- 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
- 微信统一支付接口返回“签名错误”的可能原因
- Java日志设计实践(1) - 常见问题
- 小新air14学计算机,小新Air14对比小新Pro13哪个更香,盘点办公学习的
- 学会用Word制作拼音田字格练习本,简单实用更省钱,宝妈必学
- 阅读笔记 - 20220401
- 如何解决Gridea部分主题不渲染Katex的问题
- 进程、线程、程序的区别
- SEO技术大师-论坛网站SEO设置方法
- 四川初中计算机老师工资多少,揭秘四川中小学教师工资待遇,你觉得高吗?
- python 解析二维码图片
- office tab enterprise 14 直装版
热门文章
- 51单片机间接寻址C语言,51单片机的寻址方式
- 计算机突然找不到u盘了,win10系统u盘文件突然不见了怎么恢复
- Windows下Zookeeper启动错误Invalid arguments, exiting abnormally
- iphone之参数知识(一)
- 球面坐标系与三角函数 Spherical Coordinates and Trigonometric Functions
- Polynomial Commitments代码实现【2】——lovesh/kzg-poly-commit
- autojs识别二维码
- oracle 复制表方法,Oracle 数据库之表的复制
- 嗨,你真得懂this吗?
- linux 实时显示网速,linux 实时显示网速bash