再開するにあたって、自宅のパソコンがWindowsからMacに変わったので、Windows Live Writerが使えなくなってしまった。
Live Writerはとても使いやすく気に入っていたので、何とかならないか検討した。
Windowsパソコンの購入、VMwareをMac上で動かす、Boot Campを使う、どれもWindowsのライセンスが必要となり費用が発生するため却下した。
調査した結果、無償でありWEB上での評価も上々な、ScribeFireをChrome上にインストールして使用することにした。
プロバイダの設定に多少悩んだが、使用できるようになった。
参考URL:
]]>MFCプログラミングの経験がほぼ無いため、GUI部のコーディングを経験者に依頼し、動作部のみ自分でコーディングすることにした。
これを機会に、MFCの勉強をしようとしたが、書籍は古いものしかなくWEB情報に頼らざるをえない状況である。
さすがに古くても参考書は手元に置きたいので、比較的口コミの好評な以下の参考書(中古)を注文した。
アマゾンのプライム会員なので、本日4月24日(金)に注文し、明日4月25日(土)には届く。
こういう時には、プライム会員でよかったと感じる。
「Amazon.co.jp: 標準講座MFC6.0―Visual C++による効率的なWindowsプログラミング (Programmer’s SELECTION): ハーバート シルト, 田中 正造, Herbert Schildt, コスモワークス: 本」
http://www.amazon.co.jp/dp/4881357042/
]]>
シガーとシングルモルトウィスキーが好きらしいので、サントリーのシングルモルトウィスキー「山崎」を買って飲んでみた。
まろやかで柔らかな味わいは、今まで飲んだことのない経験でした。
少々割高ですが、いろいろ飲んでみたと思いました。
これをきっかけに、なりたい自分を追及したいですね。
]]>画像の最大、最小、平均輝度を求める方法
px->data.max = 0;
px->data.min = 0xffff;
px->data.ave = 0;
px->data.count = 0;uint64_t total = 0;
for (int y = 0; y < roi->rows; ++y){
for (int x = 0; x < roi->cols; ++x) {
for (int c=0; c<roi->channels(); c++) {
unsigned short B = roi->at<cv::Vec3s>(y, x)[0];
unsigned short G = roi->at<cv::Vec3s>(y, x)[1];
unsigned short R = roi->at<cv::Vec3s>(y, x)[2];
unsigned int pixelData = B + G + R;if (pixelData > px->data.max) px->data.max = pixelData;
if (pixelData < px->data.min) px->data.min = pixelData;
total += pixelData;
px->data.count++;
}
}
}
px->data.ave = (unsigned int)(total / px->data.count);
参考サイト
]]>ShareMemクラス
ShareMem.h
ShareMem.cpp
ShareMem.vb
参考サイト
]]>試行錯誤した構成
OpenCV cv::MatまたはIplImage画像形式のまま、共有メモリに書き込み、VB.NETでOpenCVを利用できる、OpenCvSharpを導入することで画像を転送する。
C/C++側から共有メモリへ書き込みが出来るが、C/C++、VB.NET共に読み込みできない。調査を進めると、画像データ内のポインタがエラーとなっていた。調べてみるとポインタの実メモリ部は共有メモリには書き込まれていないことが判明。確かに別のアドレス空間から、このポインタを参照してもデータにはアクセスできないですね。
今回の構成
C/C++側でOpenCVデータをビットマップに変換し、そのデータ部を共有メモリに書き込む。ビットマップインフォメーション部の転送は時間がないので今回は考えていない。おいおい「構造体の共有メモリ転送」としてアップします。
以下にコードを示す。
C++側ソース
BmpMemクラス ----------
BmpMem.h
BmpMem.cpp
main()部
VB.NET部
参考サイト
]]>C++部分の動作ステータスを確認するため共有メモリを導入したのでそのコードを記録する。
C++部
PfaSharedMem.h
PfaSharedMem.cpp
VB.NET部
関数定義部
共有メモリ作成部
共有メモリ読込み部
共有メモリ破棄部
以上
]]>OpenCVは左上原点
OpenGLは一般的な左下原点
OpenCVを一般的な座標で考える場合は、(x,y,z) = (1,-1,-1)をか掛ける。
参考サイト
]]>
#define _USE_MATH_DEFINES
#include <math.h>
参考サイト
]]>Dim count As Integer
count = System.Windows.Forms.TabControl.tabItem.TabPages.Count
tabItem はタブの名称。初期値は、TagPageX X=ページ番号となる。
]]>参考サイト
◆画像処理効果
処理前
処理後
以下のコードを使うと「stack overflow」で停止するので注意が必要です。原因究明はこの処理を使う必要が発生したときに行う。
以下に制作したSURF検出器による特徴点検出部のソースを示す。
Detectors.cpp
SIFTはノンフリー版なので、この関数を使用するには以下の2点を追加する必要があります。
1.マクロとヘッダーの追加
2.main関数の最初にcv::initModule_nonfree関数を追加
参考サイト
]]>ROI(Region Of Interest)を利用して部分処理を行う。今回は4分割しそれぞれを回転させた。
◆画像処理効果
処理前
処理後
以下に制作したTilingクラスのソースを示す。
Tiling.h
Tiling.cpp
ソースコード
参考サイト
]]>◆画像処理効果
処理前
処理後
以下に制作したSimpleBlobアダプタによる特徴点検出部のソースを示す。
Detectors.cpp
参考サイト
]]>◆画像処理効果
処理前
処理後
以下に制作したFAST検出器+Dynamicアダプタによる特徴点検出部のソースを示す。
Detectors.cpp
参考サイト
◆画像処理効果
処理前
処理後
以下に制作したFAST検出器+Pyramidアダプタによる特徴点検出部のソースを示す。
Detectors.cpp
参考サイト
]]>◆画像処理効果
処理前
処理後
以下に制作したFAST検出器+Gridアダプタによる特徴点検出部のソースを示す。
Detectors.cpp
参考サイト
]]>