OpenCVSharp

OpenCVSharp4で細線化

いろいろプログラムを組もうとしたが、やっぱりライブラリには勝てなかったよ... using OpenCvSharp; using OpenCvSharp.XImgProc; namespace thinning { class Program { static void Main(string[] args) { Mat src = new Mat(@"D:\OpenCV\curves0.png", I…

OpenCVとカメラを使ったフォームアプリケーション

はじめに カメラで撮影した画像を、OpenCVで処理してからフォームアプリで表示させたかったので作成した。撮影+画像処理はbackgroundWorker内で行い、timerでbackgroundWorkerを定期的に呼び出すことにした。 ツールのレイアウト TableLayoutPanel PictureBo…

OpenCVSharp4で勾配構造テンソルを使った二値化

OpenCVのチュートリアルのこの章をOpenCVSharp4仕様に書き換えた。 構造テンソルを使うと、勾配の方向や勾配の一貫性などがわかる。 解説↓ negizoku.hatenablog.jp プログラム using OpenCvSharp; namespace Anisotropic_image_segmentation_by_a_gradient_s…

OpenCVSharp4の画像モーメントで面積、重心計算

画像のモーメントからは、面積・重心など様々な情報がわかる。 ↓使用例 negizoku.hatenablog.jp p=q=0p=q=0かつ画像IxyIxyが二値画像のとき、M00=m−1∑x=0n−1∑y=0IxyM00=∑x=0m−1∑y=0n−1Ixyとなり、画像の面積を表す。また、M00,M10,M01M00,M10,M01を使って重…

OpenCVSharp4で内外判定

内外判定とは 点が「領域の内側にあるか外側にあるか」判定すること Cv2.PointPolygoonTest()を使うと判定できる。オプションで領域との距離を測定することもできる。 プログラム OpenCVSharp4の導入はコチラ using System; using OpenCvSharp; namespace po…

OpenCVSharp4でバウンディングボックスの描画

バウンディングボックスとは ある領域を長方形(矩形)で囲むこと。今回は水平&鉛直方向に伸びた矩形と、斜めの矩形で検出する。 方法 OpenCVSharp4の導入はコチラ 画像を読み込み 二値化 エッジ検出 輪郭検出 親輪郭からバウンディングボックスを描画する …

OpenCVSharp4で多角形凸包してみた

はじめに 多角形凸包とは、ある領域を「ヘコみのない多角形」で囲むことである。 方法 画像を読み込む 輪郭を求める 輪郭の点の集合を集める 集めた点で凸包する 表示 プログラム ほとんどmotchy様のプログラムを参考にしたが、現バージョンに合わせて書き換…

OpenCVSharp4で画像に等高線を描く

ゲームをやっていたら等高線を書きたくなったので。。。 方法 画像の正規化 画像の階調を粗くする 階調を荒くした画像でエッジ検出 階調を荒くした画像にエッジを上描き 等高線画像の表示 プログラム using System; using OpenCvSharp; namespace 等高線 { c…

OpenCVSharp4で輪郭検出

輪郭検出とは cannyなどで検出したエッジから、輪郭(ループ)を取り出すこと。OpenCVのCv2.FindContours()では輪郭同士の包含関係も取り出せる プログラム OpenCVSharp4の導入はコチラ using System; using OpenCvSharp; namespace Finding_contours { clas…

OpenCVSharp4でテンプレートマッチング

テンプレートマッチングとは 入力した画像から、テンプレートと似ている場所を抽出する方法。 方法 Cv2.MatchTemplate(src, templ, result, TemplateMatchModes) C# を使う。TemplateMatchModesには以下の種類がある TemplateMatchModes 和訳 説明 CCoeff 共…

OpenCVSharp4で逆投影

逆投影とは 2つの画像のヒストグラム中で近しいものを強調すること プログラム using System; using OpenCvSharp; namespace 逆投影 { class Program { static void Main(string[] args) { //画像の読み込み Mat src1 = new Mat(@"D:\Back_Projection_Theory…

OpenCVSharp4で凹凸係数法による影の除去

はじめに 凹凸係数 rijrij とは、各画素 xijxij をその周辺の平均輝度 RijRij で除することで得られる係数である。 カーネルを(2n+1)×(2n+1)(2n+1)×(2n+1)としたとき、凹凸係数 rijrij は次式で求まる。rij=xijRijrij=xijRijRij=1(2n+1)2n∑p=−nn∑q=−nxi+p,j+…

OpenCVSharp4でハフ変換による直線検出

ハフ変換(Hough Transform)について 直線を表す式としてよく知られるのが y=ax+by=ax+b である。このとき(a,b)(a,b)が決まれば直線の式も求まるので、直線をF(a,b)=y−(ax+b)=0F(a,b)=y−(ax+b)=0と考えることもできる。 しかし F(a,b)=0F(a,b)=0 の定義域は…

OpenCVSharp4で構造要素(structure elements)を使った処理

はじめに OpenCVの公式サイトを見てstructure elments(≒カーネル)を使った水平線・鉛直線の抽出を勉強した。 方法 structure elementsと一致する箇所だけを残し、楽譜から、線と音符を切り分ける。 画像を読み込む 読み込んだ画像を二値化し反転する 鉛直…

OpenCVSharp4で射影変換

射影変換とは 画像平面を任意の3D視点から見直すこと 方法 画像の読み込み 入力画像の4点を指定 出力画像の4点を指定 指定した点を対応させる射影変換のパラメータを求める 射影変換を行う 射影変換の数式は以下の通り。全部で9個のパラメータがあるが、8自…

OpenCVSharp4の画像の読込、表示および保存

基本的な機能も備忘録代わりに書いておく 画像の読み込み ①Mat()で読み込む方法と②Cv2.imread()で読み込む方法がある。 //①Mat()で読み込み Mat mat1 = new Mat("D:\\src.png"); //②Cv2.Imreadで読み込み Mat mat2 = Cv2.Imread("D:\\src.png"); C# ちなみに…

OpenCVSharp4で位相画像の作成

位相画像とは 位相限定相関法(Phase Only Correlation)などで使用される画像。フーリエ変換した画像の位相だけを取り出した画像のこと。 F[{Xij}]={Guv}F[{Xij}]={Guv}とするとPhaseImage({Xij})=F−1[{Guv|Guv|}]PhaseImage({Xij})=F−1[{Gu…

OpenCVSharp4のエッジ強調(一次微分、Prewitt、Sobel、Laplacian、canny etc...)

OpenCVSharp4の色々な輪郭抽出フィルタを試してみた※2020/06/08追記 正規化の方法が間違っていました。 方法 VisualStudioにNuGetでOpenCVSharp4とOpenCVSharp4.runtime.winをインストール 次のプログラムを実行 using System; using OpenCvSharp; namespace…

OpenCVSharp4のカラーマップ機能を使った

カラーバーにするには Cv2.ApplyColorMap(src, dst, ColorConversionCodes) C# を使う //サンプルコード using System; using OpenCvSharp; namespace カラーマップ { class Program { static void Main(string[] args) { Mat mat = new Mat(@"D:\icon.jpg")…

OpenCVSharp4でmatの要素(画素)にアクセス

はじめに OpenCVSharp4でmatの要素にアクセスする方法をまとめた 値の取得 値の取得方法として①Atメソッドを使う方法②getメソッドを使う方法③インデクサーを使う方法がある。 using System; using OpenCvSharp; namespace Matの要素にアクセス { class Progr…

OpenCVSharp4でフーリエ画像の作成

サンプルプログラムをほとんどそのまま流用して、プログラムの順序を観察した。ちなみにOpenCVでのフーリエ変換はFFTでなくDFTである。 方法 VisualStudioにNuGetでOpenCVSHarp4とOpenCVSHarp4.runtime.winをインストール 下記のプログラムを実行 using Syst…

OpenCVSharp4の二値化を試す(単純二値化、大津の二値化、適応的二値化)

方法 VisualStudioにNuGetでOpenCVSharp4とOpenCVSharp4.runtime.winをインストールする 次のプログラムを実行する using System; using OpenCvSharp; namespace 二値化 { class Program { static void Main(string[] args) { //入力画像を読み込みグレース…

OpenCVSharp4のMat行列の基本演算

自分へのメモも兼ねて基本演算をメモしておく プログラム using System; using OpenCvSharp; namespace matの演算を試してみる { class Program { static void Main(string[] args) { //計算用のmat1とmat2を定義 Mat mat1 = new Mat(3, 3, MatType.CV_64FC1…

OpenCVSharp4で濃度変換(線形濃度変換、ガンマ補正、ヒストグラム平滑化)

手順 VisualStudioにOpenCVSharp4とOpenCVSharp4.runtime.winをインストール 下記のプログラムを実行 using System; using OpenCvSharp; namespace 濃度変換 { class Program { static void Main(string[] args) { Mat src = new Mat(@"D:\2ff84d3c.jpg");//…

OpenCVSharp4で自作フィルタを使う

手順 NugetでOpenCVSharp4とOpenCVSharp4.runtime.winをインストール 次のプログラムを実行 using System; using OpenCvSharp; namespace 自作フィルタ { class Program { static void Main(string[] args) { Mat src = new Mat(@"D:\bTqb4E.jpg");//画像の…

OpenCVSharp4で色々な前処理フィルタを試してみた

はじめに 撮影した画像を見やすくする前処理として有名な「膨張」「縮小」「オープン」「クローズ」「平均値」「ガウシアン」「中央値(メディアン)」「バイラテラル」フィルタを使ってみた 手順 VisualStudioにOpenCVSharp4とOpenCVSharp4.runtime.winをイ…

OpenCVsharp4で濃度ヒストグラムの作成&平滑化

濃度ヒストグラムとは 「画素の明るさごとのヒストグラム」のこと濃度ヒストグラムは、明るさの補正や二値化する際の目安に使われたりなどする プログラム サンプルプログラムをほとんど流用 using System; using OpenCvSharp; namespace 画像ヒストグラム {…

OpenCVSharp4でwebカメラを使ってみた

はじめに OpenCVを使ってwebカメラをとりあえず使ってみたかった using System; using OpenCvSharp; using OpenCvSharp.Extensions; namespace カメラテスト { class Program { static void Main(string[] args) { var capture = new VideoCapture(0); int f…

OpenCVSharp4を導入してみた

導入方法 1.Nugetで「OpenCvSharp4」と「OpenCvSharp4.runtime.win」の両方をインストールする。 2.以下のプログラムをテスト using System; using OpenCvSharp; namespace 画像処理テスト { class Program { static void Main(string[] args) { var str = n…