フォトショのパズルアクション

フォトショップで絵をパズルにするアクションが落ちていたのでメモ

http://www.photoshop-action.no/specialfx3.htm

すごい便利なんですが、イラレ版もほしぃ
探したらあるの・・・かなあ。今回は白無地パズルを作ったからイラレでやるべきだったんですが、ベクトルベースのパズルなんてあまり流行らないと思うし、無さそうだなあ


advanced tutorialにある通り、きちんと作業すれば未完成のパズル風にすることもできる。

OFLibに関して

オプティカルフローのCUDAライブラリを頒布してくれている大学がありまして、少しお世話になってたんですが、自分のプログラムに組み込もうとするとビジュシーのランタイムライブラリのあたりでエラー。シンボルの二重定義でエラーが出る。調べるとランタイムライブラリの重複使用が問題のよう。
ランタイムライブラリの設定は、ビジュシーでプロジェクトのプロパティ>>構成>>C/C++>>コード生成にて、

  • MT : ランタイムライブラリを静的リンク
  • MD : 動的リンク(持ち運ぶときランタイムdllが必要らしい。その代わり本体はダイエットに成功。そうか、俺ももっと動けば

で、デフォルトはMT。しかし拾ってきたOFLib.libというフロー計算ライブラリはMDでコンパイルされていたようで、おそらく無理にランタイムDLLをリンクしようとして、MTライブラリとシンボルが重複しておわた、、、というかんじ。
もう少し調べてみると、

  • MT : MDオプションでも何とか動く
  • MD : MTだと動かない // 重要

そのため、MTには少し我慢してもらうことにしてMDオプションでコンパイルしたところ、それはそれでエラー。不正にランタイムライブラリを利用した、とかなんとか(error:R6034)。おそらくMT側のスト。


で、ビジュシーの専門家にもなれないし、OFLib.libもソース頒布まではないためこれはもはや、、、



自分でフロー計算を書く!!






あ、てか、OFLibと同じアルゴリズムは昔実装したのを思い出した。問題はそれをCUDA化する元気か、、、


・・・数時間で終わるかな


参考
http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/imura/computer/cpp/vc_runtime/disp_content
http://msdn.microsoft.com/ja-jp/library/abx4dbyh(VS.80).aspx

追記

ダイアログのクラスの二重定義

色々試して手疲れますた….メインダイアログとモードレスダイアログが双方のメンバ関数を使い合えるようにしたかったのだが,双方のヘッダをインクルードしようとしたら当然二重定義に….初めての事であせった.


結果,3時間くらい迷ったあげく,,,orz


MainDlg.h内

#include "SubDlg.h"
class CMainDlg
{
   ~~~
   CSubDlg* m_csd;
};


SubDlg.h内

class CMainDlg;   // ここに追加
class CSubDlg
{
   ~~~
   CMainDlg* m_cmd;   // 必ずポインタね
};


SubDlg.cpp内

#include "MainDlg.h"   // ここでCMainDlgクラスを読み込む

~~~



MainDlg.h側では普通にSubDlg.hをインクルードしてるが,これも.cppに移動しておーけーのよう.
ご参考.
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200112/01120133.txt

MFCでモードレスなダイアログ作成

概要

久々にMFCアプリを作ったので,メモ.(個人的にアプリという響きは昭和生まれである事を忘れさせてくれるなんかがある)
モードレスとは,子ダイアログを立ち上げながら親の操作も出来る…かんじ.


以下,VisualStudio2008MFCダイアログベース.

はじめに

普通に子ダイアログを立ち上げる場合,子ダイアログのクラスをニューしてdoModal()する.
but,
それだと親ダイアログが固まり,時に思わしくない.そこでモードレス(モーレス?)を作ってみる.大体の流れは,


リソースに子ダイアログを追加,クラスを作る

メインダイアログの関数からクラスのポインタpDlgをニューし,pDlg->create()で表示させる

あといろいろ.


今回はメインダイアログのボタンから子ダイアログをモーダレスの立ち上げ/消去を行い,子ダイアログクラスの目盛の確保/破棄や表示はその都度行う.あと,子ダイアログからメインダイアログの関数も呼べるように.

関連研究(敬称・敬語略)

ネットやらで資料を探すと,作り方に少しばらつき.

http://www.ccad.sist.chukyo-u.ac.jp/~mito/ss/program/C/DialogBase/app/genDlg/index.htm

メインダイアログの関数内でメモリの確保,表示,破棄を行ってて素人好み.

http://www.hcn.zaq.ne.jp/no-ji/reseach/990615.htm

子ダイアログのコンストラクタに表示処理,また画面を消すときに"delete this;"など,使い勝手が良さそう(=むずい)
あと,モーダレスの表示,非表示をShowWindow()で行って,メモリはそのまま.

実装

ダイアログ,リソース追加

DialogのプロパティでVisibleをtrueにする.falseなら関数内でShowWindowする必要あり
あと今回は子ダイアログの生成/破棄を親からのみ出来るように,SystemMenuもfalseに変更.

表示

メインダイアログのメンバ変数に,子クラスのm_pDlgを持たせておいて,

m_pDlg = new CpDialog(this);
m_pDlg->Create(IDD_DIALOG2)


子クラスのコンストラクタにthisを渡しているのは,子から親のクラスを呼べるようにするため.



取り敢えずここまで.
公共放送の編集室で暇だったので,途中しっかり書いてみた.


vs2008でCUDA

今までCUDAをVisualStudio2008でコンパイルするときの決まり、「カスタムビルド規則へのCuda.rulesの追加」が出来なくて、
http://sourceforge.net/projects/cudavswizard/
から落としたカスタムのプロジェクト設定を使ってんたんですが、やっとできるようになったのでメモ


参考
http://cudasample.net/ins/vs2008.html


プロジェクト名の上で右クリックで良かったのか…。
プロジェクト設定ばかり探していて見つからなかったというorz


これでMFCとくっつけられるお

opencvでウェブカメラの映像が取得できない


windows7
・opencv1.0
・64bit
vaio

と,理由は色々考えられたんですが,終わってみればウェブカムのビデオフォーマットの話….たぶんvaioウェブカムがUVCで,aviを直に流してくれるvfwではなかったため.
解決策としては,

DirectXSDKを利用する.http://t-tlt-t.at.webry.info/200810/article_2.html
より簡単に利用する.http://www.atinfinity.info/wiki/index.php?OpenCV/videoInput%20Library%E3%81%AB%E3%82%88%E3%82%8B%E3%83%93%E3%83%87%E3%82%AA%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3


下のほうを使わせていただきました,多謝.
うーん,しかし最近の外付けウェブカムはほとんどがUVCみたいですが,みなさんopenCVでどうやってキャプチャしてるんだろう?他に簡単なやり方があるのだろうか…(ありそうだ.)