・第3引数:カーネルサイズ=ぼかしの強さ(Size型、正の奇数を指定) Integer Kernel(1, 0) = -Depth             ・第2引数:回転角度(反時計回り) EmbossDirection.Left '左 '効果適用後の画像 vb.netって使い始めるととっても便利なメソッドがいっぱい! vb.netで画像表示するときの記述をメモってます。 画像ファイルの表示; 画像の重ね合わせ; 画像サイズ変更; 画像の一部取得; 画像ファイルの表示 ファイルから表示     M.Matrix02 = 0.333F お問い合わせは、こちら↓ このボタンを押すと、カメラ画像を30度ずつ回転させるようにします。     M.Matrix20 = 0.333F ・この処理には時間がかかります。大量の画像を処理する場合は実用に耐えません。 ・このサンプル中のApplyKernel関数、Monotone関数、RGBRange関数は他のサンプルに登場する同名の関数とまったく同じ内容です。 使用例:PictureBox1の画像にエンボス処理をする例                     下記にポイントを書きます。, 顔検出は、パラメータファイルを OpenCV のGitHub から持ってきたのですが、各種のブログサイトにあるように、, https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml, を持ってきて、実行フォルダにコピーしても動きません。 VB.NET でも作成可能ですが、サンプルコードでは C# 6.0 を使用しています。どちらでもいいなら C# を使いましょう。 C# または VB.NET でExcelファイルを読み込むには Google検索の罠             Return         Case C#, SKProgramLabさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog Rotateを押す度に、画像が反時計回りに30度ずつ回転します。 このあたりの挙動は、HaarDetectionType.FindBiggestObject を変えると面白いです。, 以上を踏まえて、カメラを使ってリアルタイムに検出した結果がこちら。 その中でも特に、COMオブジェクト解放(ReleaseComObject)が書かれていない情報は絶対に参考にしてはいけません。理由は後述します。 As Graphics = Graphics.FromImage(DestImage) アイコンは作者イメージ。 '右下 Y As .NETで音声処理を試してみる NAudio編 第1回.NETで機械学習を試してみる ML.NET編 第1回; 開発メモ その53 DockerのベースOSについて.NETで画像処理を試してみる OpenCVSharp編 第3回; 開発メモ その163 Ubuntu 18.04 with CUDA 9.2でcaffeをビルドする ↑ 極端な例ですが、わりと冗談ではないです, 上記の問題を避けるためにもEXCEL.EXEを使用しないライブラリを使って開発することを強くオススメします。 Return 255 こんにちは、SKです。 C#/VB.NETで画像処理シリーズの第15弾。 今回は、OpenCVSharpを使って顔検出を行う方法を紹介します。 画像の中に存在する「人の顔」を検出する手法であり、誰の顔かを判断する顔認識ではありません。 OpenCVには"Haar-cascade"と呼ばれる分類器によって顔検出を行う機能… | By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. New Bitmap(SourceImage.Width, SourceImage.Height)             As Integer = RGBRange((B + BUpper) \ Weight), BMP2.SetPixel(j, i, Color.FromArgb(R, G, B)), Dim DestImage As EmbossDirection.Right '右 (エンハンス処理と私は好んで言っています), エンハンスをすることによって、顔検出がしやすいようにします。 Integer = -Depth 【補助HP】 Y, 'R, G, Bの値が0~255の範囲に収まるように調節します。 ClosedXML よりも高速, 個人的には、旧形式の対応が不要なら ClosedXML のほうが使いやすいと感じています。, 実は ClosedXML や NPOI だと、まれにファイルによっては読み込みに失敗することがあります。     Dim = -Depth 何が言いたいかというと、画像の中の顔のサイズがある程度わかっている必要がある、ということです。 Return 0 すなわち、画像中のオブジェクトで、顔と思しきオブジェクトの大きさは、この範囲内に含まれる必要があります。 BMP2 As Bitmap カメラの画像をぼかす(=平滑化)処理をかけていきます。, カメラ画像を加工する関数”Process”を追加します。引数に画像データ"img"を渡します。Mat型の引数は自動的に参照渡しになるので、後はこのimgを加工していくだけで、PictureBoxにその画像が表示されます。, OpenCVには平滑化処理がいくつか用意されていますが、代表的なGaussianBlur(ガウシアンブラー)を使います。, http://opencv.jp/opencv-2svn/cpp/imgproc_image_filtering.html#cv-gaussianblur             Kernel(2, 1) イメージングソリューション, 1.1 線を引く 1.2 いろいろな線種、線幅 1.3 ラインキャップ 1.4 連続した線を引く 1.5 四角を描く 1.6 ベジェスプライン 1.7 カーディナルスプライン 1.8 円弧を描く 1.9 楕円を描く 1.10 塗りつぶされた楕円を描く 1.11 図形のグラデーション塗り 1.12 図形のレンダリング品質の変更 1.13 扇形を描く 1.14 ポリゴンを描く 1.15 GraphicsPathオブジェクトで多角形を描く 1.16 文字列を描く 1.17 クリップ 1.18 多角形のクリップ 1.19 座標系の変更(1) 1.20 座標系の変更(2) 1.21 座標系の変更(3) 1.22 アフィン変換, 2.1 マウスボタンへの反応 2.2 マウス移動への反応 2.3 ラバーバンド(直線) 2.4 ラバーバンド(四角形) 2.5 変形ウィンドウの表示 2.6 マウスで移動できる変形ウィンドウ 2.7 実行時に形の変わる変形ウィンドウ 2.8 複雑な変形ウィンドウの表示 2.9 画面上を動き回る変形ウィンドウ 2.10 簡易アニメーション 2.11 半透明のウィンドウ, 3.1 画像ファイルの表示 3.2 画像の色をRGB で表示 3.3 RGB の分離(1) 3.4 RGB の分離(2) 3.5 RGB の分離(3) 3.6 モノクローム変換(1) 3.7 モノクローム変換(2) 3.8 色の分布を二次元で表示 3.9 ヒストグラムの表示 3.10 水平方向の輝度を表示 3.11 垂直方向の輝度を表示 3.12 モザイク処理 3.13 色表現ビット数の制御, 4.1 水平方向エッジの検出 4.2 垂直エッジの検出(1) 4.3 垂直エッジの検出(2) 4.4 ラプラシアン 4.5 画像のネガ変換 4.6 ソフトフォーカス 4.7 ガンマ補正 4.8 ノイズ除去 4.9 最低輝度のピクセルの抽出, 1.1 ソフトフォーカス(1) 1.2 ソフトフォーカス(2) 1.3 エンボス(1) 1.4 エンボス(2) 1.5 エンボス(3) 1.6 ブラー(1) 1.7 ブラー(2) 1.8 ブラー(3) 1.9 風(1) 1.10 風(2) 1.11 スレッド化(1)~Timerによるスレッド監視 1.12 スレッド化(2)~BackgroundWorkerの利用 1.13 スレッド化(3)~BackgroundWorker、Queue、Timerの利用 1.14 スレッド化(4)~BackgroundWorkerのReportProgressメソッドの          利用 1.15 スレッド化(5)~コントロールのInvokeRequiredの利用, 2.1 クラスを使用したヒストグラムの表示 2.2 クラスを使用した輝度グラフの表示 2.3 閾値を超える部分を表示する 2.4 クラスの開発 2.5 指定の閾値範囲を表示 2.6 指定範囲の輝度伸張 2.7 輝度をリニアに変換 2.8 輝度をポスタル変換 2.9 ソラリゼーション, 3.1 クラスの開発 3.2 2倍に単純拡大(補間なし) 3.3 2倍に単純拡大(補間あり) 3.4 半分に縮小 3.5 任意の大きさに拡大縮小 3.6 任意の角度に回転(順方向) 3.7 任意の角度に回転(逆方向) 3.8 任意の角度に回転(線形補間) 3.9 任意の角度にリアルタイム回転 3.10 マウスを使用した任意角度の回転 3.11 画像の変形 3.12 画像の回転・反転 3.13 画像を引き延ばし回転 3.14 画像をねじる 3.15 画像にサインカーブの変形を行う 3.16 画像を渦状に変形 3.17 菱形に変形, 4.1 2画像をロジカル合成 4.2 2画像を算術合成 4.3 特定色部分の置き換え 4.4 アルファブレンド 4.5 ウォーターマーク設定 4.6 電子透かし 4.7 隠し絵, Akira:【C++/CLI】CSVファイル保存(輝度値のCSVファイル保存) (10/18), (09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。.     Dim Integer Case Direction                 M.Matrix21 = 0.333F Bitmap) ・第2引数:出力画像         ・第1引数:入力画像(Mat)     End                         RGBRange((G + GUpper) \ Weight) Next X 新形式ファイル(.xlsx)と旧形式ファイル(.xls)の両方に対応している 3, 3), Integer(,))     Dim 自分は使ったこと無いのですが EPPlus も評判が良さそうです。, Microsoft は Office 2007 から、それまでの独自規格(.xls, .doc, .ppt)を廃止して、オープンな規格であるOpen XML(.xlsx, .docx, .pptx)に移行しました。 こんにちは、SKです。             使用します。. BMP1 As Bitmap '画像のへりの部分のピクセル数 もし解放漏れが残ったままプログラムが途中で終了してしまった場合、プロセスにEXCEL.EXEがいつまでも残り続けることになります。     Dim EmbossDirection.Up '上         Case こんにちは、SKです。 CType(SourceImage, こっちではなく、haarcascades_cuda というフォルダ内の下記の同名ファイルを使ってください (少なくとも、2.4.10では)。, https://github.com/Itseez/opencv/blob/master/data/haarcascades_cuda/haarcascade_frontalface_default.xml, // Enhancement image to detect face というコメントがありますが、引数に渡した画像のコピー、つまり顔検出させる対象にエフェクトをかけています。 画像処理ソリューションWeb版 経験上、Excelシートに埋め込まれた画像やマクロなどが原因となってエラーになることが多いです。 R = RGBRange((R + RUpper) \ Weight) As New 同じ名前のパッケージがNuGetで見つかります。片方は、ネイティブdllがインストールされないため、実行時にエラーが出ます。, インストールするのは、女性のアイコン (OpenCVの世界でおなじみの Lenna さん) の描かれたパッケージを選んでください。, 上のコードのメソッドの引数bitmapに人間の顔が写った画像を渡すと顔の部分に青の枠線が描画され、その中身がぼやけさせる結果の画像を返します。 また、サーバーサイドで実装した場合はOfficeのライセンス違反となる可能性があります。 そのOpen XMLを扱うために提供されているライブラリがDocumentFormat.OpenXmlなのですが、これがExcelファイルを扱うには使い勝手の悪いものであったため、Excel処理の部分だけを使いやすい形式にラップしたライブラリがClosedXMLになります。, コア部分が Microsoft の純正ライブラリであるという安心感 EmbossDirection.UpLeft '左上 '右上 As Integer = COM参照であれば実際にファイルを開くのはExcelアプリケーションなので、マクロ付きであろうが拡張子が.csvになっていようが(Excelのバージョンが古くない限り)どんなファイルでも読み込むことができます。, 先述したCOMオブジェクトの解放を確実にやるのであれば、先ほどのサンプルはここまで書く必要があります。, サンプルコードでは触りの部分だけしか紹介できていないので、書き込みや保存については各ライブラリのドキュメントや他の紹介記事を参照ください。. For X = 0 To MatrixSize - 1 アフィン変換とか、画像の描画などは普通に業務で使うことが非常に多く、.NET の System.Drawing 名前空間を使って、そつなくこなすのですが、ことは C++ となると話は別。                     Kernel(1, 2) Bitmap(BMP1.Width, BMP1.Height), For R As 【Newブログ】 B As                 表示テキストは"Rotate"に。 (そして残念なことに検索上位のページでも多くがCOMオブジェクト解放について考慮されていません), しかし、Microsoft.Office.Interop.Excelを使う方法は以下に挙げる理由によりオススメしません。 画像全体が強めにぼかされました。     M.Matrix10 = 0.333F Why not register and get more from Qiita? Kernel, 1, 127, 127, 127), Dim i C# を軸とした、.NET基盤のWinForms, WPF, Universal Platform Appのアプリ開発技術を追求。 つまり、検証作業をするのに OpenCV で何ができて、何がダメなのかを理解する必要があります。, なので、OpenCV の勉強は .NET のラッパーライブラリを使って行うことにします。 こんにちは、SKです。 C#/VB.NETで画像処理シリーズの第6弾。 カメラの画像を回転します。 OpenCVSharpとは? skprogramlab.hatenablog.com カメラ画像表示アプリケーション skprogramlab.hatenablog.com (前回)画像の一部を拡大する skprogra… Integer                 Dim             B = 0, 'ドット(j, i)の新しい色を算出します。         Case ブログを報告する, http://opencv.jp/opencv-2svn/cpp/geometric_image_transformations.html#cv-getrotationmatrix2d, http://opencv.jp/opencv-2.1/cpp/geometric_image_transformations.html#cv-warpaffine. C As Color         Case Value 以下の関数Embossを使用すると、画像にエンボス効果(=浮き彫りのような効果)を                     Is < 0 C#, SKProgramLabさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog こんにちは、SKです。 C#/VB.NETで画像処理シリーズの第3弾。 カメラの画像をぼかす(=平滑化)処理をかけていきます。 OpenCVSharpとは? skprogramlab.hatenablog.com カメラ画像取得プロジェクト skprogramlab.hatenablog.com 動画手順 youtu.…             G = 0 一番簡単にファイルのイメージを表示するには <ピクチャボックス>.Image = Image.FromFile(<ファイル名>) ファイルをロックしないように表示するには Public Sub FileToImage(ByRef dstObject_ As PictureBox, ByVal fileName_ As String) If Not dstObject_.Image Is Nothing Then dstObject_.Image.Disp…         ・第2引数:出力画像(Mat)             G =     M.Matrix11 = 0.333F             MatrixSize As Integer Is > 255 最後に、コード全文を載せておきます。             Kernel(2, 2) 起動時 Kernel(0, 1) = -Depth     Dim     For Y = 0         Case     Dim Kernel(2, 0) = -Depth ・この処理には時間がかかります。大量の画像を処理する場合は実用に耐えません。 ・このサンプル中のApplyKernel関数、Monotone関数、RGBRange関数は他のサンプルに登場する同名の関数とまったく同じ内容です。 使用例:PictureBox1の画像にエンボス処理をする例 Imaging.ImageAttributes = -Depth 仕事で画像処理を本格的にやる必要に駆られています。 後述の NPOI よりも扱いやすい, Open XML規格用に作られたものであるため、旧形式ファイル(.xls)を読み込むことができない, Excelファイルを読み込んで、A列のセルの値を先頭行から最終行まで取得するサンプル, NPOIは、15年もの歴史を持つJavaライブラリApache POI( https://poi.apache.org/ )の.NET移植版。 C# および VB.NET では、不要になったメモリをガベージコレクタが自動的に解放してくれます。 Integer     End B = (C.B * Kernel(X, Y)) + B = Depth Help us understand the problem. exe形式にして配布する場合、ExcelがインストールされていないPCでは動作しません。         Case G As 最後に、コード全文を載せておきます。     Dim             Kernel(0, 2) ブログを報告する, http://opencv.jp/opencv-2svn/cpp/imgproc_image_filtering.html#cv-gaussianblur.     Dim M j As         ・第1引数:回転中心座標 EmbossDirection.UpRight             Kernel(0, 2)     Dim ニックネーム:Akira             B =         Case こんにちは、skです。 c#/vb.netで画像処理シリーズの第14弾。 今回は、画像処理の分野で良く使われる背景差分を行う方法を紹介します。 背景画像と現在画像を重ね合わせ、画像の中で変化のあった領域を抽出できます。 動体検知に使われたりします。     Dim BMP Kernel(2, 0) = Depth 先人の方々が既に説明されていますが、OpenCV のラッパーライブラリは、調べた限り、5 つあります。, このうち、上2つが一番活発だと思いますが、特に、OpenCvSharp は日本人の方がリードしているため、非常に安心です。             Kernel(1, 2) = Depth こういう前処理は非常に重要です。画像サイズを縮小して、高速化したりすることもあります。, 顔検出は万能ではありません。 加えることができる。使用例はすぐ下にある。, Dim Kernel(,) 冒頭で述べた、COMオブジェクト解放が書かれていない情報を参考にしてはいけないのはこのためです。             Kernel(2, 2) i = 1 To BMP1.Height - Edge As New Imaging.ColorMatrix, M.Matrix00 = 0.333F (カメラもOpenCVが提供しています。), Takuya Takeuchi @takuya_takeuchi         For 今から書くのであれば、まず ClosedXML や NPOI といったオープンソースライブラリの使用を検討するべきです。, (以下、「COM参照」を「Microsoft.Office.Interop.Excelを使ってExcelを外部操作する手法」という意味で使用させていただきます。COMの意味については https://ja.wikipedia.org/wiki/Component_Object_Model などを参照してください), 正しくは、「注意して書かなければ」とても処理が遅くなる、です。     Dim C#/VB.NETで画像処理シリーズの第6弾。 起動してからもシートやセルへのアクセスはExcelを経由するため、できるだけアクセス回数を減らすような実装方法を意識する必要があります。, 当然ですが、Excelアプリケーションを操作するためにはExcelがインストールされている必要があります。 EmbossDirection.DownRight     M.Matrix33 = 1.0F そのため、これをベースに勉強していきます。, OpenCV は非常に多くの画像処理機能が含まれています。フィルター処理、行列演算、ラベリング、物体検出、機械学習、カメラ入力等々。     M.Matrix22 = 0.333F CType(Array.CreateInstance(GetType(Integer), 範囲を広くすると、顔ではないものが検出されて精度が落ちます。 ・第1引数:入力画像 ボタンクリック時に、angleを30ずつ増加させるようにします。, 画像を回転するには、OpenCVのGetRotationMatrix2D関数で回転行列を求め、WarpAffine関数で回転することができます。, http://opencv.jp/opencv-2svn/cpp/geometric_image_transformations.html#cv-getrotationmatrix2d