Imaginary Code

from kougaku-navi.net

ProcessingでCGと画像の合成をやるときの背景画像の描画

Processingにおいて3次元の描画モード(P3D)の時にimage()で画像を描くと、3次元空間中に画像が板状に配置された状態になる。これはこれで便利なのだが、ARのように3DCGと2Dの背景画像を合成するようなプログラムを作ろうとした時に、CGが背景画像に埋も…

Processingでフルスクリーンと通常のウィンドウを切り替える

この話は前にも書いているが、前のコードではフルスクリーン化した際にウィンドウ本体へのフォーカスが失われるという症状があることがわかったので、そのあたりを修正した。具体的には this.requestFocus(); という1行を加えればよい。ついでに通常のウィン…

Processingでウィンドウのサイズをマウスで変更&最大化できるようにする

フォーラムにあったコードほぼそのままだけど、import文を足して動作するコードにしたものがこちら。描画領域のサイズ(widthとheight)はウィンドウ変更に連動して値が変わるようになっている。 import java.awt.event.ComponentAdapter; import java.awt.e…

Processingで複数のウィンドウを作る

PAppletの派生クラスでもう1つのウィンドウ上で動くアプレットの内容を記述し、PFrameを使ってそのアプレットを動かすウィンドウを作る感じ。なんか毎回こういうの書いてる気がするなー。 PFrame.pde import java.awt.Frame; import java.awt.Insets; publi…

Arduinoにおけるコマンドラインインタフェースの雛型

ArduinoとPC間のシリアル通信において、ターミナルからキーボード入力でコマンドを打ち込んで対話的に動かしたいときのプログラム例です。たまに忘れるので覚書きとして。 Arduinoのプログラム void setup() { Serial.begin(9600); Serial.setTimeout(15000U…

mbedJS + p5.jsでWebブラウザからmbedを制御する

mbedJSを使うと、mbedでWebページ連動のハードウェアを作ることができます。今回はmbedJSの導入方法を説明し、mbedJSとp5.jsの連携、iPadでの利用などについて紹介します。 mbedJSとは mbedJSはmbedをネットワーク経由で制御するためのサーバファームウェア…

Processingにおけるの画像(PImage)のコピー

【2016/10/25修正】 Processingにおいて画像はPImage型で扱われます。特に画像処理をやるようなケースにおいて、画像のコピーを行いたいことが多々あります。その場合に注意すべきことをここに書いておきます。 PImageのコピー 画像をコピーしたいときうっか…

ArduinoからProcessingへint型のデータを送る

ArduinoでanalogRead()を使ってアナログ端子を読み取ると0〜1023の整数値(int型)を返します。Arduinoで扱われるint型は2バイトです。これに対し、シリアル通信では1バイトずつデータが送られるため、2バイト以上のデータを送受信するにはちょっと工夫が…

ProcessingでコンピュータビジョンライブラリBoofCVを使う

BoofCVというJava用のコンピュータビジョンライブラリがあります。これを使うと基本的な画像処理に加え、オブジェクトトラッキングや特徴量抽出、ステレオ画像計測、領域セグメンテーション、モザイキングなどができます。機能豊富なOpenCVと比べると見劣り…

ProcessingでAWTのボタンを使う

ProcessingでGUIというとControlP5というライブラリがありますが、お世辞にも使いやすいものではないので、JavaのAWT(Abstract Window Toolkit)のGUIをそのままのっけるのを試してみました。以下は色をランダムに変更するボタンを表示する例です。 import …

ちょっと変わった方法で円とか四角形をプルプルさせる - Processing

ellipse()やrect()などの描画命令が並んでいる場所をfilter.begin()とfilter.end()で挟み込むと、その範囲内で描画した円や四角形がプルプルするようになる、というのを実験的に作りました。 メインのコードはこんな感じ。普通のアイデアだったら、ellipse()…

Processingで実行中にウィンドウサイズを変更する

実行中にウィンドウのサイズを変更するには、frame.setSize()とsize()の両方を使います。setSize()にはウィンドウの上下左右の枠も含めたサイズを指定する必要があります。以下にプログラム例を示します。 void setup() { size(400, 300); } void draw() { b…

Processingでビデオキャプチャを手軽に切り替えられるライブラリ「CaptureSelector」を作りました

先日シリアルポート設定ダイアログを表示できるライブラリを作りましたが、それのビデオキャプチャ版を作りました。下図のような設定ダイアログが表示されて、キャプチャデバイス、サイズ、FPSを自由に切り替えることができます。 ダウンロード こちらのペー…

PAppletの中でさらにPAppletを動かす

Processingで画面内に独立した描画領域を作りたいときのテクニックです。PGraphicsを使う方法もありますが、ここではPAppletを使う方法を紹介します。 LocalApplet local_app; void setup() { size(500, 300); local_app = new LocalApplet(this); local_app…

Processingでフルスクリーン表示にする

size()でdisplayWidthとdisplayHeightを指定してPresentモードで実行するのでもいいですが、通常の実行モードにおいて特定のタイミングでフルスクリーン化したいときはこんな感じで。 void setFullScreen() { size(displayWidth, displayHeight); frame.remo…

Processingでスクリーン座標系とローカル座標系の相互変換を行う

translate()やrotate()などの幾何変換によって移動・変形された座標系(ローカル座標系)と、スクリーンの左上隅を原点とするスクリーン座標系の相互変換を行う方法について説明します。 スクリーン座標系からローカル座標系への変換 スクリーン座標系におけ…

Processingでシリアルポートの設定が簡単になるライブラリ「SerialSelector」を作りました

ProcessingでArduinoやXBeeと通信するプログラムを作っているとたびたびシリアルポートがらみのエラーに出くわします。大抵の場合、ポート番号や通信速度が正しく設定されていないことが原因なのですが、プログラムでポート番号を「COM1」とか「/dev/tty.usb…

Arduinoのシリアル通信でint型のデータをやりとりする

Arduinoのシリアル通信のメモです。1回のSerial.write()で送れるデータは1バイト、すなわち数値として表現できる範囲は0〜255です。int型ならもっと広い範囲の数値(-32768〜32767)を扱えるわけですが、intは2バイトなのでこれを送受信するにはちょっと工…

ProcessingとKinectを使って縦線2本で立体感が出るGIFアニメを作ろう

最近巷で「GIFアニメに縦線を2本入れると立体感が出る」と話題ですね。「元画像との比較ないの?」とか「縦線入れる"だけ"じゃないだろ」みたいなツッコミが散見されるので、Kinectを使って自分で縦線GIFアニメを作れるコードを書きました。科学的な検証に…

Processingで自分のグローバルIPアドレスを取得する

たまに使う機会があるので、備忘録として残しておく。以下は@yoggyさんにもらったコード。短すぎてワロス。 void setup() { String ipaddr = loadStrings("http://checkip.amazonaws.com")[0]; println(ipaddr); } 以下はこのへんのページを参考に最初書いた…

PCからProcessingでTHETAのシャッターを切る

リコーの全天球カメラ「THETA」いいですね。さっそく@MobileHackerzさんをはじめとするハッカー諸氏によってハックが進んでますが、僕もProcessingから操りたいのでコード書きました。といっても、@GOROmanさんのコードをProcessingに移植しただけなのですが…

Arduino + XBee WiFiでTHETAのシャッターを切る

前回、ProcessingからTHETAのシャッターを切るのが作れた時点で半ば勝利は確信していたのですが、Arduino+XBee WiFiを使ってシャッターを切るのにも成功しました。これでモバイルでのインターバル撮影はもちろん、各種電子工作と連携した全天球撮影が可能と…

ProcessingでGlueMotorをコントロールする

Maker Faire Tokyo 2013でも展示されていた寺崎和久さんのGlueMotorをProcessingからコントロールするコードを書きました。 GlueMotorはサーボモータをスマートフォンやタブレットに繋いで手軽にコントロールできるケーブルです。マイコンや複雑な回路は不要…

とあるプロジェクションマッピング作品に感じるモヤモヤについて

みなさんこの動画はご覧になりましたか? BOX この『BOX』という作品では、アームロボットに取り付けられた動くスクリーンに対してプロジェクションマッピングが行われます。スクリーンの動きに同期して正確に投影される映像は実に幻想的です。しかし、どこ…

Processingでタイトルバーのないウィンドウを作り、それをマウスドラッグで移動できるようにする

タイトルバーがないプログラムをときどき作りたくなることがありますが、タイトルバーがないとウィンドウが移動できなくなってしまいます。そこで、ウィンドウ内をドラッグしたときに移動できるようにしましょう、というのが以下のコードです。 import java.…

PCに接続されているWebカメラの映像を表示するだけのソフトを作りました (ソースコード付き)

メディアアート製作やインタラクション系の研究に携わっている人なら、一度はWebカメラをシステムの一部として使ったことがあるでしょう。それはノートPCに内蔵されたチャット用Webカメラだったり、USBカメラだったり、USBビデオキャプチャだったりするわけ…

母のためのケータイの手引き

最近ようやく母にケータイを持たせたので手描きのマニュアルを作ってあげました。機種はソフトバンクのガラケー202SHです。 こんな感じ。 ここ数年すっかりスマフォ(iPhone)使いになってしまったので、ガラケーを触るのはひさしぶりでしたが、正直しんどか…

ProcessingでKinectを使って遮蔽表現のあるARを作ろう

今日の話は,ARにおいて人や実物体の後方にCGがある時に,CGの一部または全体が隠れて見えなくなっている状態(オクルージョン)をきちんと表現するべく,Kinectを使ってみましょうというものです. 前回はマーカベースの手法で遮蔽を実現する方法を紹介しま…

Processingでオクルージョン表現のあるARを作る(ARマーカ編)

ARにおいて,現実の世界に3次元CGが違和感なく存在しているように見せるための条件の1つに,オクルージョンの実現があります.オクルージョンとは隠れのことで,実物体の背後にCGがあるときにCGの一部またはすべてが隠れて見えなくなっている状態をきちんと…

Processingでお手軽にGoogleマップから画像を取得する

Google Mapper for ProcessingというGoogleマップから地図画像を取得するためのProcessing用のライブラリがあります.ごくシンプルな機能しかありませんが,とても簡単に扱えるので遊んでみてください. 使い方 上記の配布サイトに行くと,Downloadと書かれ…