質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

3637閲覧

Processing で虹色を描くにはどうしたらよいでしょうか?

mia_flower

総合スコア66

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

1グッド

0クリップ

投稿2021/08/23 16:18

編集2021/08/24 00:46

前提・実現したいこと

Processingで顔を認識し、
顔の周りに放射線状の虹色の線を描きたいと考えています。

発生している問題

・lineの角度によって色を変化させる(虹色にする) 

にはどのようにしたら良いのでしょうか。
ご教授頂けますと幸いです。

### import gab.opencv.*; import processing.video.*; import java.awt.Rectangle; Capture cam; OpenCV opencv; Rectangle[] faces; boolean playing; int x; float angle; void setup(){ size(displayWidth, displayHeight); String[] cameras = Capture.list(); cam = new Capture(this, cameras[0]); cam.start(); } void draw(){ if(cam.available() == true){ cam.read(); image(cam, 0, 0, displayWidth, displayHeight); opencv = new OpenCV(this, cam); opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE); faces = opencv.detect(); } for (int i=0; i<faces.length; i++) { angle +=0.07; //顔のx座標とy座標 float cx = displayWidth-(faces[i].x*2+faces[i].width); float cy = faces[i].width; int a = 7; int b = 7;    //角度に合わせて、色を変化させる rotate( radians( angle ) ); stroke( angle, 100, 100 ); strokeWeight(1); line( cx + cos(angle * a) * 50, cy + sin(angle * b) * 50, cx + cos(angle * a) * 150, cy + sin(angle * b) * 150 ); for (int j = 1; j <= 50; j++) { line( cx + cos(j) * 50, cy + sin(j) * 50, cx + cos(j) * 150, cy + sin(j) * 150 ); } } }

現在のディスプレイウインドウです。虹色にする事ができません。
下記の部分が間違っているのでしょうか。

   //角度に合わせて、色を変化させる rotate( radians( angle ) ); stroke( angle, 100, 100 ); strokeWeight(1);

イメージ説明

環境

Processing3.5.4
Mac OS

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

現在のディスプレイウインドウです。虹色にする事ができません。
下記の部分が間違っているのでしょうか。

stroke(angle, 100, 100)のように書くときは、HSBモードを使用します(colorMode(HSB, 360, 100, 100)等)

デフォルトはRGBモードですので、赤成分だけをいじっていることになります。
それでは虹色にはなりようがありませんね?

colorMode / Processing.org


lineの長さを変化させ、波打っているように見せる

編集されたので取り下げたということだと思いますが、一応やってみました。

完全にランダムだと波打っているようには見えないため、noise(パーリンノイズ)でやるのがいいんでしょう(よくわかっていませんが^^;

単純にnoiseでやるとスムーズにつながらない部分が出るため、ググって出てきたこちらをそのまま使わわせていただきました。
周期的ノイズについて(2020.06.12) • Koji's Site

しかし線がピクピクする(微妙に角度が変わる)のが気になります(精度の問題?? 線が十分長い(2000とか)と気にならないのですが^^;

Processing

1import java.awt.Rectangle; 2 3Rectangle[] faces; 4 5 6void setup() { 7 size(400, 400); 8 // 色相 彩度 明るさ 9 colorMode(HSB, 360, 100, 100); 10 noFill(); 11 12 faces = new Rectangle[]{ new Rectangle(100, 100), }; 13} 14 15void draw() { 16 background(0); 17 18 faces[0].setLocation(mouseX - 50, mouseY - 50); 19 20 for (Rectangle face : faces) { 21 niji(face); 22 } 23} 24 25void niji(Rectangle rect) { 26 pushMatrix(); 27 translate(rect.x + rect.width/2, rect.y + rect.height/2); 28 29 for (int j = 1; j <= 50; j++) { 30 // colorModeで色相を0~360に設定したので、jを度に変える 360°以上回っているので剰余をとって360内に収める 31 stroke(degrees(j) % 360, 100, 100); 32 33 // 周期的ノイズ 1のところを大きくすると変動が早くなる 小さくすると遅くなる 34 float d = cnoise(degrees(j) + frameCount * 1, 360) * 30; 35 // 上のforを j <= 500 とかにするとわかりやすいが、単純にnoiseだと3時の位置がスムーズに繋がらない 36 //float d = noise((degrees(j) % 360) * 0.05, frameCount * 0.05) * 30; 37 38 float l = 150 + d; 39 line(cos(j) * 50, sin(j) * 50, cos(j) * l, sin(j) * l); 40 } 41 popMatrix(); 42} 43 44// [周期的ノイズについて(2020.06.12) • Koji's Site](http://koji.jpn.org/mytweetprocessing/tw20200612/) 45float cnoise(float t, float c) { 46 float p = t * TWO_PI / c; 47 return noise(cos(p) + 1, sin(p) + 2); 48}

アプリ動画

投稿2021/08/24 11:57

編集2023/07/28 17:02
TN8001

総合スコア9801

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mia_flower

2021/08/25 03:14 編集

先日質問した際はお世話になりました。今回もご丁寧に回答して頂きまして感謝しております。 colorModeには2種類の書き方があったのですね。。理解いたしました。 色相の設定の仕方なども非常に勉強になりました。今後活用したいと思います。 教えて頂いたコードをもとに、顔の中心座標から虹を描くように設定してみました。 綺麗な虹が描かれ感動しています。波打つ表現に周期的ノイズを使うというアイデアに、目から鱗でした。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問