1. 程式人生 > >OpenCV繪製朱利亞(Julia)集合圖形

OpenCV繪製朱利亞(Julia)集合圖形

朱利亞集合是一個在複平面上形成分形的點的集合。以法國數學家加斯頓·朱利亞(Gaston Julia)的名字命名。

朱利亞集合可以由下式進行反覆迭代得到:



對於固定的複數c,取某一z值(如z = z0),可以得到序列 



這一序列可能反散於無窮大或始終處於某一範圍之內並收斂於某一值。我們將使其不擴散的z值的集合稱為朱利亞集合。

以下使用OpenCV編碼繪製Julia集圖形:

#include <Windows.h>
#include<highgui/highgui.hpp>

using namespace cv;

const int icount = 200;     //迭代次數

const float c = -0.85;       //實部
const float d = 0.088;      //虛部
double m_real, m_image;     //Mandelbro集

class ComplexClass
{
public:
	double real;
	double image;

	ComplexClass(double r = 0, double i = 0) { real = r, image = i; }
};

ComplexClass operator+(const ComplexClass& a, const ComplexClass &b)
{
	ComplexClass c;
	c.real = a.real + b.real;
	c.image = a.image + b.image;
	return c;
}

ComplexClass operator*(const ComplexClass& a, const ComplexClass &b)
{
	ComplexClass c;
	c.real = a.real * b.real - a.image * b.image;
	c.image = a.image * b.real + a.real * b.image;
	return c;
}

double Model(ComplexClass a)
{
	return sqrtf(a.real * a.real + a.image * a.image);
}

double Iteration(ComplexClass a, int n)
{
	if (n == 0)
		return Model(a);
	else
	{
		ComplexClass temp = a*a;
		temp.real += c;
		temp.image += d;
		//    temp.real += m_real;  把這兩句代替前面的兩句就是mandelbrot集了
		//    temp.image += m_image;
		return Iteration(temp, n - 1);
	}
}

Vec3b dye(double dist)
{
	if (dist < 1000000 && dist>-1000000)
		return Vec3b(255, 0, 0);
	else
		return Vec3b(0, 0, 0);   //Julia集之外的區域置為黑色
}

int main()
{
	Mat image = Mat(Size(500, 500), CV_8UC3, Scalar::all(10));
	for (int Y = 0; Y < image.rows; Y++)
	{
		for (int X = 0; X < image.cols; X++)
		{
			float x = (X - image.cols / 2) / 200.0;
			float y = (Y - image.rows / 2) / 200.0;

			m_real = x;
			m_image = y;
			ComplexClass a(x, y);
			float dist = Iteration(a, icount);

			image.at<Vec3b>(Y, X) = dye(dist);
		}
	}
	//namedWindow("OpenCV For Julia", 0);
	imshow("OpenCV For Julia | c = -0.85  d = 0.088", image);
	waitKey();
}

改變實部c和虛數b的值可以得到不同的圖形,很漂亮。

c=-0.576   d=0.456:


c=-0.8 d=0.156:


c=0.285 d=0.02:


c=-0.85 d=0.088:


相關推薦

OpenCV繪製(Julia)集合圖形

朱利亞集合是一個在複平面上形成分形的點的集合。以法國數學家加斯頓·朱利亞(Gaston Julia)的名字命名。 朱利亞集合可以由下式進行反覆迭代得到: 對於固定的複數c,取某一z值(如z = z0),可以得到序列  這一序列可能反散於無窮大或始終處於某一範圍之內並收斂

十五分鐘瞭解

分形之朱利亞集 ——零·開始—- 我們總說,一花一世界。在我們看來,自然給予我們的微小的細節,我們也渴望能從中獲得一些上帝的啟示。 那麼來看一張圖 很簡單的4個線段,人類就會想,會整合,去猜測簡單的4個線段的規則: F−F++F−F 規則: F

opencv繪製圖形輪廓並篩選面積操作

1、 類比halcon的篩選區域面積的操作select_shape運算元,opencv也可以對圖形的輪廓進行面積的篩選,剔除無效區域。 int main() { Mat srcImage = imread("D:\\Opencv\\Project\\ConnectionPr

(Polya)罐子模型

polya www 條件 命題 證明 http ans ext sub (波利亞(Polya)罐子模型)罐中有a個白球,b個黑球,每次從罐中隨機抽取一球,觀察其顏色後,連同附加的c個同色球 (波利亞(Polya)罐子模型)罐中有a個白球,b個黑球,每次從罐中隨機

畢業精仿版-『辦理安格羅斯金大學畢業證』原件一模一樣證書

出國留學 分析 erp 包含 教育 專業服務 的人 進度 offer 辦理安格利亞羅斯金大學畢業證 【微/Q:9798 3838——WeChat:9798 3838】【帖子永久有效,看不到請點擊百度快照】聯系人Allen【辦理畢業證,成績單,學歷認證、文憑、學位證、成績單等

10、蘋果圖標由來(喬布斯和比爾蓋斯的故事)+納斯+Linux圖形界面

利納斯 喬布斯 比爾蓋斯歷史回顧 CP/M——》DOS比爾蓋茨計算機科學之父—圖靈(×××,被監禁,吃了塗了有毒的的蘋果自殺):喬布斯用咬了一口的蘋果的原因,因為他非常崇拜圖靈的,以此紀念圖靈。當時喬布斯用的是Unix(蘋果系統現在也是Unix,並且是BSD架構的,直接跑在硬件上的系統,所以性能要比安卓的要好

OpenCV繪製多邊形和區域填充

OpenCV繪製多邊形和區域填充 繪製多邊形和區域填充主要用到了2個函式:polylines()和fillPoly()函式。 程式碼如下: #include<opencv2/opencv.hpp> #include<vector> #include <i

OpenCV 繪製正多邊形

 OpenCV 繪製正多邊形 #include <iostream> #include <opencv2\core\core.hpp> #include <opencv2\opencv.hpp> #include <open

centos7用瑪mariadb資料庫遇到的所有問題搜了一堆...

安裝mysql的作者另起爐灶的開源版本:maria DB (maria DB如同 MySQL 的影子版本,瑪莉亞資料庫是 MySQL 的一個分支版本(branch),而不是衍生版本(folk),提供的功能可和 MySQL 完全相容)。 1.安裝: yum install -y maria

OpenCV繪製文字的程式碼及Mat/IplImage的轉換

  特別注意IplImage與Mat的轉換。 static void draw_count(FrameData* pFrame) { CvSize size; if (!(pFrame->buffer.data)) { return; }

[CTF]維吉尼密碼(維基密碼)

[CTF]維吉尼亞密碼(維基利亞密碼)  ----------------------百度百科 https://baike.baidu.com/item/維吉尼亞密碼/4905472?fr=aladdin 維吉尼亞密碼(又譯維熱納爾密碼)是使用一系列凱撒密碼組成密碼字母表的加密

使用js實現5種加密解密演算法(凱撒密碼、字母倒排序、單表置換、維基、轉換加密演算法)

在學習作業系統的時候,我們會學到系統安全的章節,而在這一塊會有關於加密解密演算法的學習。 一共有5種常見的加密解密演算法:凱撒密碼、字母倒排序、單表置換、維基利亞、轉換加密演算法。  我使用了js實現了這5種演算法,而且做了視覺化處理、輸入輸出格式化處理,使得操作起來非常

OpenCV 繪製人臉檢測框和關鍵點

在做人臉檢測時,我們需要將檢測的結果繪製到圖片上檢視效果,這時可以利用 OpenCV 的基本繪圖函式將人臉檢測框和人臉關鍵點繪製到原圖上。 關鍵程式碼如下: // TODO FaceDetectEngine 初始化 cv::Mat image = cv::im

繪製學習模型的訓練損失和驗證損失圖形繪製訓練精度和驗證精度圖形

history = model.fit() 繪製訓練損失和驗證損失 import matplotlib.pyplot as plt loss = history.history['loss'] val_loss = history.history['val_loss'] epochs = ran

python opencv繪製多邊形和多邊形填充

import numpy as np import cv2 import matplotlib.pyplot as plt a = np.array([[[10,10], [100,10], [100,100], [10,100]]], dtype = np.int32)

如何繪製指定方程式的曲面圖圖形

    Excel中有繪製曲面圖的功能,但是如何繪製具體的方程式對應的曲面圖呢?本文就以z=sin(x)*cos(y)為例,教你如何繪製方程式對應的曲面圖。     首先,要確定圖形的取值範圍,這裡取了0-2PI。    在B3:AE3輸入公式 =(COLUMN()-1)*

Turtle繪製帶顏色和字型的圖形(Python3)

在Python中有很多編寫圖形程式的方法,一個簡單的啟動圖形化程式設計的方法是使用Python內嵌的Turtle模組。Turtle是Python內嵌的繪製線、圓以及其他形狀(包括文字)的圖形模組。它

OpenCV——繪製填充輪廓drawContours

vector<vector<Point> > contours; contours.push_back(currentFrameEdge); Mat savedGrayMat = Mat::zeros(RectData[0].rows, RectData[0].cols, CV_

Kinect2+Opencv繪製聲源定位方向

沒什麼事兒做給之前的Kinect2聲源定位功能加上一個小的圖形化介面,效果如下圖所示: Kinect2的SDK會返回聲源相對於Kinect2正前方的角度,例如我在畫面中偏左,角度自然就偏左,大小為-0.52。 對於聲音,Kinect2這塊最重要的有兩個引數,一個是角度

opencv繪製多邊形

opencv2.4.4 今天用cvFilllPoly()進行影象的繪製,其中遇到一些引數的問題,個人理解如下: CVAPI(void)  cvFillPoly( CvArr* img, CvPoint** pts, const int* npts,