分形学习
来源:互联网 发布:网上商城源码 java 编辑:程序博客网 时间:2024/06/06 20:26
昨天的时候终于从零构建起了一个OpenCV+VS的基本环境,同时制作出了第一个分形的图形。
今天经过一个小时的学习,了解了OpenCV下的颜色控制,修改后的代码如下:
#include "stdafx.h"#include<iostream>#include<opencv\cv.h>#include<opencv2\core\core.hpp>#include<opencv2\opencv.hpp>#include<opencv\highgui.h>#include<vector>using namespace std;using namespace cv;double log2(double x){ return (log(x)*(1.0 / log(2.0)));}int taoyizhijisuan(double x, double y){ double x0, y0, x1, y1; double x_a, y_a; x_a = -1; y_a = 0; x0 = x; y0 = y; long int i; for (i = 1; i<1000; i++) { x1 = x0*x0 - y0*y0 + x_a; y1 = x0*y0 * 2 + y_a; if ((x1*x1 + y1*y1) > 4) break; x0 = x1; y0 = y1; } //if (i >= 1000) return i; //else // return (i + 1 - log2(x1*x1 + y1*y1));}long sinColor(double input){ return (long)((sin(input * 2 * 3.1415926 / 510 - 3.141596*0.5) + 1)*0.5 * 255);}int main(){ //Mat pic=Mat::zeros(600,600,CV_8UC3); Mat pic(600, 600, CV_8UC3); for (double i = 1; i<600; i ++) { for (double j = 1; j<600; j ++) { if (taoyizhijisuan((i - 300) / 100, (j - 300) / 100) >= 1000) { pic.at<Vec3b>(i, j)[0] = sinColor((taoyizhijisuan((i - 300) / 100, (j - 300) / 100))) ; } else if(taoyizhijisuan((i - 300) / 100, (j - 300) / 100) <500) pic.at<Vec3b>(i, j)[1] = sinColor((taoyizhijisuan((i - 300) / 100, (j - 300) / 100) *20)); else pic.at<Vec3b>(i, j)[2] = sinColor(taoyizhijisuan((i - 300) / 100, (j - 300) / 100) *30); } } pic.at<Vec3b>(120, 220) = 0; namedWindow("output", CV_WINDOW_AUTOSIZE); imshow("output", pic); waitKey(); return 0;}
图形输出如下:
其中OpenCV的颜色控制如下:
pic.at<Vec3b>(i, j)[0] =Bpic.at<Vec3b>(i, j)[1] =Gpic.at<Vec3b>(i, j)[2] =R
这里和之前的记忆有些出入,我之前记得OpenCV是通过在一个点的位置横向放三个点的方式来对颜色进行控制的(注:即为(x(0,1,2),y(0))表示一个点,其中如果只有x(0)有值,该点颜色即为蓝色,若只有x(1)有值,则该点颜色为绿色),创建一个x=300,y=300的图像,输出后为一个长宽比3:1的矩形),不过现在最优先目的是制作出来一个能够创建出让我满意的分形图案的程序,所以对于机理暂时放下不进行研究。
目前上面的取色逻辑是使用sin函数对图案的颜色进行平滑计算,但是效果一般;
今日学到的内容:
1、OpenCV的颜色修改方式。
2、如果想要尝试多种算法的优劣,将不同的算法分别单独建立为函数,然后在主程序中调用是一个比较方便的做法。
阅读全文
0 0
- 正在学习分形
- 分形学习中
- 分形学习
- 分形学习之LS文法构图
- 差分约束学习
- 分形
- 分形
- 分形
- 分形
- 差分约束 学习资料
- 差分约束学习笔记
- 变分推断学习笔记
- hibernate中部分函数学习
- 差分约束的学习
- RecyclerView学习--item分割线
- 机器学习之分位数
- 学习数据库分表和分库思想
- 分形与分形艺术
- 《C++ Primer Plus》(第六版)笔记二
- 剑指Offer:不用加减乘除做加法(一刷)
- Cos的多项式
- 今天的感想
- CentOS7修改时区设置
- 分形学习
- 用VI 下面出现E45: 'readonly' option is set (add ! to override)
- Java之旅No.4:Java的继承(0)
- ThinkPHP5的安装使用/tp5快速入门
- adb找不到sd卡的存储路径
- PHP开发APP接口
- CodeIgniter 视图篇
- PAT甲 1102. Invert a Binary Tree (25)
- rigibody组件