2013.7.3 OpenCV2.4.6が公開されました。
Windows版の入手先はこちら↓
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/
変更点はこちら↓
http://code.opencv.org/projects/opencv/wiki/ChangeLog#New-functionality
評価はこれから。。
2013.7.3 OpenCV2.4.6が公開されました。
Windows版の入手先はこちら↓
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/
変更点はこちら↓
http://code.opencv.org/projects/opencv/wiki/ChangeLog#New-functionality
評価はこれから。。
Windows8が発表された当初はWindowsがWindowになっちゃったと、揶揄されていましたが、Windows8.1ではストアアプリを同時に3つまで表示する事ができるようになり、Window3になりました。
こんな感じ↓で。
さらにマルチモニタだと、6つのストアアプリを表示できます。
正確には24インチ以上のモニタで横幅が2560画素以上の解像度のモニタを使うと4つのアプリが同時表示可能らしいのですが、そんなモニタ持っていないので、評価出来ず...
この3つのアプリを同時に表示する方法は、まず、1つ目のアプリを開き、マウスをアプリの一番上まで持っていき、アイコンが手のひらマークになるようにします。
次にマウスの左ボタンをクリックしたまま、アプリを下に引きずり下ろすようにします。
さらに、この状態でアプリを画面の左右どちらかへ移動すると、画面中央付近に仕切り線が表示されるので、アプリを表示したい側へドロップします。
アプリが片側に表示された状態で、マウスを画面左下へ持っていき、スタートボタンをクリックし、スタート画面を表示させ、2つ目のアプリを実行します。
同様に3つ目のアプリを開くと、仕切り線上にアプリが表示されるので、2つの同時だけで良いなら、開いた3つ目のアプリ上の左右どちらかをクリックすると、クリックした側へアプリが表示されます。
3つ同時にアプリを表示させるには、3つ目のアプリを左ボタンでクリックしたまま、上側へ移動させます。
すると、真ん中に3つ目の表示スペースが現れるので、そこへアプリをドロップします。
そしてこちらがアプリを3つ同時に表示させた様子↓
ただし、同時に表示できるのは違うアプリだけのようで、例えば2つのPDFファイルを同時に2個並べてリーダーのアプリで確認する、みたいな事ができません。
少なくともWindows8.1 Previewでは。
(この場合はデスクトップ画面で、Acrobat Readerなどを使うのが普通ですかね?!)
この辺も改善されるといいのですが...
Windows8ではスタート画面の背景はあらかじめ用意されている画像のみしかスタート画面の背景に設定できませんでした。
Windows8.1では、これを任意画像に設定する事が出来ます。
(正確にはデスクトップの背景の画像と同じ物を使う事ができるようになりました。)
こんな感じで↓
設定方法はデスクトップモードの時のタスクバーを右クリックし、プロパティを選択します。
次に表示されたタスクバーとナビゲーションのプロパティのウィンドウのナビゲーションのタブを選択し、スタート画面にデスクトップの背景を表示するにチェックを入れ、OKボタンをクリックします。
これで、スタート画面の背景もデスクトップと同じ画像を使用する事が可能となります。
私がブログやマニュアルを書くときに必需品となっている、フリーの画面キャプチャソフトのScreenpressoを紹介したいと思います。
このScreenpressoで何ができるかと言うと、PrintScreenボタンを押すと、画面上のウィンドウ領域を勝手に認識してウィンドウ領域をコピーしてくれるのはもちろんの事、ウィンドウ内のツールバーやボタンなどのコントロール領域も認識してコピーしてくれます。
もちろん、任意領域のコピーも可能です。
さらに、無料版だと録画時間に制限があるものの、画面の操作の様子を動画で保存することも出来ます。
また、コピーした画像のエディタ機能もあり、画像サイズのリサイズやぼかしや文字、矢印を入れたり、無料で使える範囲内でも十分に使えます。
【画像の編集例】
ダウンロード先はこちら↓のページより
右上のダウンロードボタンをクリックし、ダウンロードはこちらよりダウンロードします。
ソフトの動作も軽いしホント便利なので、まずは使ってみては如何でしょうか!
おススメです。
ちなみに、Windows8.1でも動作しました。
Windows 8でWindows Updateなどは、チャーム→設定→PC設定の変更と行っていたのですが、Windows 8.1では、このPC設定の変更の画面がかなり変更されました。
ざっくり言うと、設定項目が増えて、各設定はフォルダにまとめられて表示の階層が一つ下がった感じ。
【Windows8のPC設定の変更】
【Windows8.1のPC設定の変更】
以下、設定項目のメニュー部分です。
Windows UpdateもWindows8.1ではPC設定の保守と管理→Windows Updateのように一つ階層が下がっています。
Windows8.1ではスタートボタンの復活がバージョンアップの目玉の一つだと思います。
スタート画面では、何かアプリを1つ以上立ち上げた状態で、マウスを左下に近づけるとスタートボタンが表示されます。
デスクトップモードでは常にスタートボタンは表示されています。
しかし!!
このスタートボタンは従来のWindows7のようなスタートメニューが表示される訳でもなく、スタートボタンをクリックするとスタート画面が表示されるのみ!となっています。
それだと、さすがにあまりにも・・・なので、このスターボタンを右クリック(もしくはWinキー+X)すると下図のようなメニューが表示されます。
Windows8の分かりづらいポイントのシャットダウンが付いた事は少しましになったでしょうか?
でも、スタートボタンをクリックした時は、やっぱりプログラムの一覧が表示される事を期待しますよね?
そこで、このメニューにプログラムへのショートカットを追加(WinXフォルダに追加)しようと試みたのですが、出来ずに断念。
(スタートメニューにこだわるのであれば、素直にスタートボタンアプリを使っちゃった方が早いでしょう。)
ただし、このスタートボタンをクリックした時の挙動は少し変える事が出来て、デスクトップモードのタスクバーを右ボタンでクリックし、プロパティを選択すると、タスクバーとナビゲーションのプロパティウィンドウが表示され、ナビゲーションタブを選択するとスタート画面という項目があるので、このスタート画面への移動時にアプリビューを自動的に表示するにチェックを入れます。
この設定の状態で、スタートボタンをクリックするとアプリビュー(Windows8でのすべてのアプリ)が表示されます。
これで、ちょっとスタートボタンをクリックした時にプログラム一覧を表示できるような気になりますが、やっぱり以前のようなメニューの方がいいですよね?!
せめて、こんな感じ↓でフォルダっぽくして欲しい!!!
Visual Studio 2013のPreviewもインストールしてみたら、1画面で見えるアプリビューの半分ぐらいをVisual Studioに占有されたました...
う~ん。見づらい。
で、結局、これ↓で落ち着いています。
このやり方は【Windows8】スタートメニューっぽいのを作成のページを参考にして下さい。
Windows8はストアアプリも使えるデスクトップメインのOS。
Windows RTはデスクトップアプリも使えるストアアプリメインのOS。
という感じに住み分けしてくれないかな~。
仕事(検査装置など)で使うには、今のWindows8は使いづらい。
カテゴリー:Windows8,Windows10
Windows8の時でもスタートアップにプログラムを登録する事はできたのですが、Windows8を起動した時点でスタート画面が表示され、デスクトップに移行した時に初めてスタートアップのプログラムが起動する仕様だったので、少し使い勝手の悪い物となっていました。
しかし、Windows8.1では、PC起動後にデスクトップ画面から起動する事が出来るようになったので、これで、PC起動後にスタートアップに登録したプログラムを起動する事が出来るようになりました。
スタートアップへの登録は少し面倒なのですが、以下の通りです。
まず、スタートアップフォルダが隠しファイル以下の部分にあるので、エクスプローラを起動し、上部にある表示タブをクリックし、隠しファイルにチェックを入れます。
次にスタートアップのフォルダへ移動します。
【ローカルユーザーのスタートメニューへ追加する場合】
Windows8(C:)⇒ユーザー⇒[ユーザー名]⇒AppData⇒Roaming⇒Microsoft⇒Windows⇒スタートメニュー⇒プログラム⇒スタートアップ
※[ユーザー名]の部分には、それぞれお使いのユーザー名が入ります。
【オールユーザーのスタートメニューへ追加する場合】
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
上記フォルダ内にスタートアップで起動するプログラムのショートカットを保存します。
(下図はGoogle Chromeをスタートアップに登録した様子)
これで、PC起動後にプログラムを起動する事ができるようになりました。
これが出来なかったせいか?Windows8はあまり装置物に使われる事が無かったように思います。
これで、少しはWindows8.1が使われるようになるか?
以前、私のブログ内のWindows8をデスクトップPCで快適に使うためのキーボード、マウス設定として、記事を書いたのですが、この記事を書いた当時は、まだWindows8が出たてで、明確なWindows8向けの設定というのはありませんでした。
しかし、現在のMicrosoftマウスキーボードセンターというマウス/キーボード設定ソフトでは、Windows8の設定が追加されています。
マウスの設定は、コントロールパネルのマウスをクリックし、設定画面を開きます。
開いたウィンドウのMicrosoftマウスの設定を変更するには、ここをクリックしますをクリックします。
するとMicrosoftマウスキーボードセンターの画面が開くので、マウスの絵の部分の設定を変更したいキーの部分をクリックします。(下図の状態)
さらにすべてのコマンドを表示をクリックします。
すると、Windows8のコマンドという項目があるので、お好きなボタンを割り振るといいかと思います。
ちなみに、私は左右のボタンにWindowsの「スタート」メニューに移動するとチャームを割り振っています。
また、最近使ったアプリを開くという項目もあるので、この機能(下図のように起動中のアプリ一覧が表示される機能)もどこかのボタンに割り振ると便利かも?しれません。
Windows8.1からは起動時にスタート画面を表示させることなく、直接、デスクトップ画面から起動する事ができるようになりました。
設定方法は以下の通り。
まず、デスクトップ画面を表示し、タスクバー上でマウスの右ボタンをクリックします。
表示されたメニューのプロパティをクリックします。
すると、タスクバーとナビゲーションのプロパティというウィンドウが表示されるので、ナビゲーションのタブを選択し、中央付近にある、サインイン時にスタート画面ではなくデスクトップに移動するにチェックを入れOKボタンまたは適用ボタンをクリックします。
これで、次回起動時からはデスクトップ画面からの起動となります。
Windows8.1 Previewに気を取られてて、何気にノーマークだったのですが、Visual Studio 2013のPreview版が公開されました。
Visual Studio 2013 Preview版の入手先はこちら↓
本日、Windows8.1のPreview版が公開されました。
Windows8.1の入手先はこちら↓
http://windows.microsoft.com/ja-jp/windows-8/preview
ただし、今のところインストールできるのはWindows8(正規版)のPCからのみ?
評価版のWindows8や他のバージョンからのインストールには、ISOファイルが必要と言われてしまうのですが、現状では、まだ公開されていません。
1日遅れでISOファイルも公開されました。
ただし、「重要」の項目にも書いてありますが、
ISO を使って Windows 8.1 Preview をインストールした場合はアンインストールできません。
との事なので、ご注意を。
.NETで画像や線などを描画する時はGraphicsオブジェクトに対して描画を行いますが、このGraphicsオブジェクトの座標系をアフィン変換する処理をグローバル変換と言います。
グローバル変換された Graphicsオブジェクトに対し描画を行うと、アフィン変換された状態で、画像や線が描画されます。
ただ、一般的なアフィン変換では
のように表現される場合が多いかと多いと思いますが、マイクロソフトの仕様では、上記の行列を転置(行と列を反転する)した
のように表示されます。
また、アフィン変換の座標系は下図のように、左上が原点、Y軸は下方向、回転は時計周りが正の方向となります。
そのため、平行移動や拡大縮小、回転の変換行列も一般的な変換行列を転置した表現となります。
X軸方向へTx、Y軸方向へTyだけ移動する平行移動の変換行列は、
X軸方向へSx倍、Y軸方向へSy倍だけ拡大する変換行列は、
原点まわりにθ°回転移動する変換行列は
となります。
少し紛らわしいので、一般的なアフィン変換と混同しないように注意して下さい。
このように表現するのは、私の経験的にはマイクロソフトだけ?だと思います。
(参考)
http://msdn.microsoft.com/ja-jp/library/vstudio/c499ats3.aspx
http://msdn.microsoft.com/ja-jp/library/vstudio/8667dchf.aspx
しかし、.NET Frameworkでは特に変換行列を知らなくても、アフィン変換用のメソッドが用意されているので、それらを使うと間違いが少ないでしょう。
平行移動は TranslateTransform
拡大縮小は ScaleTransform
回転移動は RotateTransform
(参考)Graphicsメソッド
http://msdn.microsoft.com/ja-jp/library/system.drawing.graphics_methods%28v=vs.80%29.aspx
逆に、行列を使ってアフィン変換する事も可能なので、スキュー変換のような変換も行う事ができます。
(参考)
http://msdn.microsoft.com/ja-jp/library/system.drawing.drawing2d.matrix_methods%28v=vs.80%29.aspx
また、アフィン変換を行うと、変換後の座標から、変換前の座標を計算したい場合がありますが、System.Drawing.Graphics.TransformPointsというメソッドがあるので、これを使うと簡単に座標が求められます。
これらのメソッドを使って、アフィン変換のサンプルプログラムを作成しました。
(ダウンロード)GlobalTransformations.zip(Visual Studio 2008 Exress C#)
このサンプルでは見た目上では一般的に用いられる行列の表現に合わせています。
また、エラー処理などは行っていないので、ご了承下さい。
アフィン変換の勉強の手助けになれば...
64bitに対応したユーザーコントロール(カスタムコントロール)を作成するには、前提条件として
Visual Studio はOSが64bitであっても32bitで動作している!
という点に注意しないといけません。
つまり、プラットフォームを64bitで作成したユーザーコントロールをVisual Studioのフォームデザイナでフォーム上に配置すると、32bitプログラムから64bitプログラムを呼び出す事になるので、フォームデザイナがエラーとなり、フォームを表示してくれません。
これを回避するためには、ユーザーコントロールのプラットフォームをAny CPUに設定して下さい。
この時点で、Any CPUの設定がないC++/CLIのユーザーコントロールは64bit対応ができないという事になります。
これを知らずにC++/CLIのユーザーコントロールを32bitである程度作成してしまい、64bitに対応させようと思った時に、エライ目に会いました...→結局、C#で作り直すハメに。
次に私がハマったのが、ユーザーコントロールからアンマネージのライブラリを呼ぶ場合の処理。
作成したプログラムのプラットフォームがAny CPUの時の挙動ですが、
32bitOSの場合:32bitのライブラリを呼び出す
64bitOSの場合:64bitのライブラリを呼び出す
となります。
つまり、64bitOS環境でユーザーコントロールを開発すると、Visual Studioで開発中にフォームデザイナでは、Any CPUのユーザーコントロールから、64bitのライブラリを呼び出そうとします。
ユーザーコントロールはフォームに配置した時点で、コントロールのプロパティやコンストラクタ、各種イベント処理が動いてしまうので、この時に64bitライブラリの関数が呼ばれてしまうと、フォームデザイナがエラーとなってしまいます。
これを回避するには、フォームがデザインモードかどうかを調べる
System.ComponentModel.Component.DesignModeプロパティ
を用います。
この値がtrueの場合、64bitライブラリの関数を呼び出さないようにすると、回避できます。
さらに話をややこしくするのが、DesignModeプロパティはコンストラクタや入れ子となったユーザーコントロールでは正しい値が取得できません。
そのため、DesignModeプロパティを取得する際には注意して下さい。
(参考)
http://support.microsoft.com/kb/839202/ja
まとめると、
●ユーザーコントロールはVB.NETもしくはC#でプラットフォームをAny CPUにして作成する。
●デザイン時に64bitライブラリの関数を呼び出さい。
という感じでしょうか?
VB.NETやC#だけで作るならプラットフォームは全てAny CPUにしておくと、あまり64bit対応の事は気にしなくても大丈夫ですね。
また、逆に32bit対応のライブラリしかなく、32bitで動くプログラムを作る場合は、64bit対応のライブラリが呼び出されないように、プラットフォームをAny CPUにはせずに、Win32に設定しておく必要があります。
C言語などでは特に32bit/64bitプログラムを作る時にはVisual Studioのソリューションプラットフォームの部分で、Win32やx64などの切り替えを行っていると思います。
(画面はVisual Studio Express 2012 for Windows Desktop)
しかし、Visual Studio Professonal 2012では、なぜか?ツールバーにソリューションプラットフォームの切り替えのドロップダウンが表示されていません。
(画面はVisual Studio Professional 2012)
そこで、ソリューションプラットフォームをツールバーに追加するには、まず、ツールバー右端にある▼の部分をクリックします。
すると、ボタンの追加または削除(A)と表示されるので、この部分にマウスポインタを合わせると、下図のようなメニューが表示されます。
ここから、ソリューションプラットフォームを追加すると、ツールバー上にソリューションプラットフォームが追加されます。
さらに、なんとなく検索も追加してみました。
これで、慣れ親しんだ感じになりました。
C#で、これまで四捨五入というと何となく
double y = (int)(x + 0.5);
とか、
double y = System.Math.Round(x);
と、行っていたのですが、画像処理で補間処理を行う時に、座標を四捨五入しようとすると、実は自分の思う通りに動いていなかった事に今更ながらに気が付いた...
何はともあれ、int、Roundを使った方法にプラスして、Floorを使って、このようなコード↓
int i;
double x;
double y_int, y_Round, y_Floor;
for (i = -30; i <= 30; i++)
{
x = i * 0.1;
y_int = (int)(x + 0.5);
y_Round = System.Math.Round(x);
y_Floor = System.Math.Floor(x + 0.5);
System.Diagnostics.Debug.WriteLine(
x.ToString() + ", " +
y_int.ToString() + ", " +
y_Round.ToString() + ", " +
y_Floor.ToString()
);
}
を実行すると、結果は下図のようになります。
これを見ると、intを使った方法では、-1.4~+0.4までが0となり、マイナス側の結果がいまいち。
Roundを使った方法では、一見良さそうなのですが、よ~く結果を見てみると、
0.5は0に、1.5は2になっている。
これは銀行型丸め(偶数丸め)と言うらしく、整数の間の値は、最も近い整数に丸めこまれるが、距離が同じ場合は偶数の値を返すとのこと。
(参考)
Math.Round メソッド
http://msdn.microsoft.com/ja-jp/library/wyk4d9cy.aspx
そんな事、全く知らなかった~
という事で、結局はFloorを使うと、小数の値が10個ずつ整数へ変換されているので、画像の座標に関する四捨五入では、ムラなく整数へ変換されているFloorを使うのが良さそうです。-0.5⇒0, -1.5⇒-1へと変換される部分が、ちょっと気持ち悪いですが。
(追記)
コメントにもあるように、数学的には四捨五入は
double y = System.Math.Round(x, MidpointRounding.AwayFromZero);
とすると良いと思います。
ここでの記事は、あくまで、座標を丸める場合のお話です。
先日、Graphicsオブジェクトの違いによる描画速度の比較として、割と一般的なGraphicsオブジェクトに対して、描画速度を比較を行いましたが、結果、DoubleBufferedが有効な時にPaintイベントで取得するGraphicsオブジェクトに対して描画するのが一番、良さそうな結果となりました。
しかし、Paintイベント内で描画処理を行うには、描画する内容を変えたい時など、面倒なので、手動でダブルバッファによる描画方法を検討してみました。
手動のダブルバッファの方法については、このページ↓に分かりやすくまとまっています。
バッファリングされたグラフィックスを手動で描画する
http://msdn.microsoft.com/ja-jp/library/ka0yazs1%28v=vs.90%29.aspx
この手動のダブルバッファについて、前回と同様に描画速度を比較してみると、以下のようになりました。(BufferedGraphicsの部分が結果です。)
【描画速度の比較】
画像を描画する方法は、他のどの方法よりも高速に描画する事ができました。
【線の描画速度の比較】
線を描画する分には自動のDoubleBufferを使った方法をさほど変わらない結果となりました。
(処理時間にも多少ばらつきがあります。)
この画像描画、線の描画の両方を見ても、手動で行うダブルバッファの描画は効果的な用です。
参考までに、手動で行うダブルバッファの描画のサンプルプログラムを置いておきます。
BufferedGraphicsContext.zip (Visual Studio C# 2008 Express)