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)集合图形相关推荐

  1. Python实现朱利亚集算法及完整源码

    Python实现朱利亚集算法及完整源码 朱利亚集是一种数学图形,它的形态多变,美丽而神秘.在计算机绘图领域,朱利亚集被广泛应用,并因此成为了数字艺术的重要组成部分. 在本文中,我将向大家介绍如何使用P ...

  2. 使用Python,OpenCV对图像进行亚像素点检测,并拟合椭圆进行绘制

    这篇博客将介绍如何使用Python,OpenCV对图像进行亚像素检测,并对亚像素点进行椭圆拟合绘制. 1. 效果图 原始图上绘制拟合椭圆 VS 原始图上绘制拟合椭圆及亚像素点绘制随机半径及颜色的圆 V ...

  3. NBA名人堂之-朱利叶斯·欧文|埃尔文·海耶斯|多尔夫·谢伊斯|鲍勃·佩蒂特|戴夫·冰

    朱利叶斯·欧文 英文名:Julius Erving 出生:1950年2月22日 身高:2.01米 NBA生涯:1976-1983年 司职:前锋 主要荣誉: ①1983年获NBA总冠军: ②5次入选NB ...

  4. 使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果

    使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果 1. 效果图 2. 源码 参考 这篇博客将使用python,opencv绘制调色板及圆形来模拟霓虹的渐变效果. 1. 效果图 可以构 ...

  5. 计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~

    计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~示例效果如下: 原图: 示例代码如下: #!/usr/bin/env python3import cv2def sort_contours(cnts ...

  6. OpenCV绘制等高线Contours的实例(附完整代码)

    OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 #include "opencv2/imgproc.hpp ...

  7. [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. 中班机器人教室设计方案_奇思妙想一起玩,机器人来了安格利亚东郡生态幼儿园亲子活动...

    奇思妙想一起玩 机器人总动员亲子活动 课程起源 有一天午休起床几个小女生正排队梳辫子,因为需要等待,孩子们比较无聊就在看教室的摆件,突然小朋友们就用机器人的语调开始对话,我听到后感觉很有意思也用机器人 ...

  9. 变量命名 – 匈利亚命名法则 - C语言零基础入门教程

    目录 1.属性部分 2.类型部分 3.描述部分 4.MFC.句柄.控件及结构的命名规范 5.变量命名规范 6.库标识符命名法 7.举例 8.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ ...

  10. 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 ...

最新文章

  1. sharepoint 2010 如何使用sharepoint多媒体视频播放media webpart功能
  2. Js文本溢出自动添加省略号ellipsis
  3. 用Delphi进行word开发
  4. c++类指针赋值表达式必须是可修改的左值_C++进阶教程系列:全面理解C++中的类...
  5. python导入csv报错_Python Pandas read_csv报错
  6. 使用Spring编写和使用SOAP Web服务
  7. 本地上传代码到github仓库
  8. WiFi穿透能力甩对手两堵墙 荣耀9X新特性令人侧目
  9. 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
  10. 微信统一支付接口返回“签名错误”的可能原因
  11. Java日志设计实践(1) - 常见问题
  12. 小新air14学计算机,小新Air14对比小新Pro13哪个更香,盘点办公学习的
  13. 学会用Word制作拼音田字格练习本,简单实用更省钱,宝妈必学
  14. 阅读笔记 - 20220401
  15. 如何解决Gridea部分主题不渲染Katex的问题
  16. 进程、线程、程序的区别
  17. SEO技术大师-论坛网站SEO设置方法
  18. 四川初中计算机老师工资多少,揭秘四川中小学教师工资待遇,你觉得高吗?
  19. python 解析二维码图片
  20. office tab enterprise 14 直装版

热门文章

  1. 51单片机间接寻址C语言,51单片机的寻址方式
  2. 计算机突然找不到u盘了,win10系统u盘文件突然不见了怎么恢复
  3. Windows下Zookeeper启动错误Invalid arguments, exiting abnormally
  4. iphone之参数知识(一)
  5. 球面坐标系与三角函数 Spherical Coordinates and Trigonometric Functions
  6. Polynomial Commitments代码实现【2】——lovesh/kzg-poly-commit
  7. autojs识别二维码
  8. oracle 复制表方法,Oracle 数据库之表的复制
  9. 嗨,你真得懂this吗?
  10. linux 实时显示网速,linux 实时显示网速bash