Pynote

Python、機械学習、画像処理について

OpenCV

OpenCV - 画像に適用するアフィン変換について

概要 画像に適用するアフィン変換について整理する。 概要 関連記事 標準座標系と画像座標系 主な変換一覧 変換の例 拡大縮小 (scaling) 回転 (rotation) 平行移動 反転 せん断 (sheer) 画像にアフィン変換を適用する流れ

OpenCV - 画像をグリッド上に分割する方法について

概要 画像をグリッド上に分割する方法について紹介する。 概要 分割数を指定して、分割する場合 分割後のサイズを指定して分割する場合 分割した画像を元に戻す

OpenCV - floodFill() を使った塗りつぶし、背景の透過など

概要 OpenCV の floodFill() を使って塗りつぶし、背景の透過を行う方法を紹介する。 概要 floodFill() サンプルコード 塗りつぶしを行う。 マスクを使用した例 指定した色を透過する。

Python - インデックスカラー画像を読み込む方法について

概要 インデックスカラー画像を PIL で読み込み、各画素のインデックスの値及びカラーパレットを参照する方法について紹介する。 Deep Learning のセグメンテーションタスクでは、正解データがインデックスカラー画像で配布されていることが多いので、色では…

OpenCV - マスクを使用した画像の合成方法について

概要 背景画像に前景画像の対象物のみを貼り付ける方法について、紹介する。 概要 手順 背景画像及び前景画像を読み込む。 マスク画像を作成する。 背景画像と前景画像を合成する。

OpenCV - 描画系の関数まとめ / 長方形、円、テキストを画像に描画する。

概要 OpenCV の描画系関数をサンプルコード付きでまとめた。 概要 描画系の関数の共通の仕様 矢印を描画する。 arrowedLine() サンプルコード 円を描画する。 circle() サンプルコード 塗りつぶさないで円を描画する。 塗りつぶして円を描画する。 輪郭を描…

OpenCV - Windows で OpenCV を導入する方法 (2018年10月版)

概要 Windows で OpenCV 3.4.1 を opencv-contrib 付きで導入する方法を紹介する。 概要 手順 1. ソースコードをダウンロードする。 2. CMake GUI でプロジェクトファイルを生成する。 OpenCV が使えるか試す。 トラブルシューティング cmake の段階で find_…

OpenCV - VideoCapture / VideoWriter で動画の読み込み/書き込みを行う。

概要 OpenCV の VideoCapture / VideoWriter で動画の読み込み/書き込みを行う方法について紹介する。 概要 Web カメラから映像を取得する。 動画を読み込む。 動画を書き込む。 各フレームを画像として、保存する。 画像から動画を作成する。 動画の各種プ…

OpenCV - アルファブレンドで画像を合成する方法

概要 OpenCV で2枚の画像をアルファブレンドして合成する方法を紹介する。 概要 アルファブレンドとは OpenCV を利用したアルファブレンド サンプルコード 矩形外をグレーアウトする。

OpenCV - 輪郭を近似する、面積を求める、Bounding Box を求める方法について

概要 FindContours() で抽出した輪郭に対して行う以下の処理を紹介する。 輪郭の抽出については下記の記事を参照されたい。pynote.hatenablog.com 輪郭の周囲の長さを計算する。[arcLength()] 輪郭の面積を計算する。[contourArea()] 輪郭を近似する。[appro…

OpenCV - 画像をリサイズする方法

概要 OpenCV で画像をリサイズする方法について紹介する。 概要 resize() 基本的な使い方 アスペクト比を固定して、幅が指定した値になるようリサイズする。 アスペクト比を固定して、高さが指定した値になるようリサイズする。 指定した大きさまたは倍率で…

OpenCV - findContours() による輪郭抽出

概要 2値画像から findContours() を使用して輪郭抽出を行う方法について紹介する。 輪郭を抽出したあとの処理については下記を参照されたい。pynote.hatenablog.com 概要 findContours() サンプルコード 画像を読み込む。 グレースケール画像に変換し、find…

OpenCV - Non Maximum Suppression について

概要 物体検出で用いられる Non Maximum Suppression の仕組み及び実装について紹介する。 概要 Non Maximum Suppression 短形の表現 Overlap Ratio Non Maximum Suppression の処理 閾値の設定 実装 モジュールを import する。 画像を読み込む。 短形を描…

OpenCV - フィルタリング / 畳み込みについて

概要 フィルタリングは、画像処理の分野で画像から特徴を抽出したり、画像の性質を変化されるために行われる処理である。 フィルタリングの仕組み及び OpenCV を利用したコードを紹介する。 概要 フィルタリング 数式による表現 フィルタリングの例 OpenCV …

OpenCV - Watershed アルゴリズムで物体の輪郭抽出を行う

概要 OpenCV の Watershed アルゴリズムで物体の輪郭抽出を行う方法について紹介する。 概要 試した環境 手順 画像を読み込む。 大津の手法で2値化する。 opening 処理でノイズを除去する。 そのまま輪郭抽出を行った場合 (失敗例) sure background を抽出す…

OpenCV - テンプレートマッチングの仕組み及び方法について

概要 テンプレートマッチングの仕組み及び方法について紹介する。 概要 テンプレートマッチングの仕組み OpenCV でテンプレートマッチングを行う方法 関数 コード テンプレートマッチング result の解釈 類似度が最も高い位置を描画がする。 類似度が高い位…

matplotlib - OpenCV の画像を matplotlib で表示する方法について

概要 OpenCV の画像を matplotlib で表示する際の注意点について 概要 OpenCV のカラー画像を表示する場合 OpenCV のグレースケール画像を表示する場合 関数化する

OpenCV - カメラキャリブレーションを行う方法

概要 OpenCV でカメラキャリブレーションを行う方法について紹介する。 概要 カメラキャリブレーション 手順 1. キャリブレーション器具を様々な距離、角度から撮影する。 キャリブレーション器具でマーカー検出を行う。 検出した画像座標上の点に対応する3…

OpenCV - inRange による範囲指定で2値化する方法について

概要 OpenCV の inRange による範囲指定で2値化する方法について紹介する。 概要 試した環境 inRange() 引数 返り値 サンプルコード グレースケール画像 RGB 画像 HSV 画像

OpenCV - cv::Mat と numpy 配列の対応まとめ

概要 OpenCV を C++ で使う場合は画像は cv::Mat として扱うが、 Python で使う場合は numpy array として扱う。 numpy array と cv::Mat ではインタフェースが幾分異なるため、その対応をまとめた。 概要 プロパティ 行数、列数、チャンネル数 カラー画像か…

OpenCV - 行列の加減乗除及び Utility 関数

概要 OpenCV の配列の加減乗除及びその Utility 関数についてまとめた。 C++、Python 両方に対応。 概要 試した環境 加減乗除 加算 関数 コード 減算 関数 コード 要素ごとの乗算 関数 コード 要素ごとの除算 関数 コード 比較 関数 コード Utility 関数 abs…

OpenCV - 配列の絶対値、平方根、べき乗、指数関数、対数関数を計算する

概要 OpenCV で行列の絶対値、平方根、べき乗、指数関数、対数関数を計算する方法について紹介する。 C++ 及び Python の両方に対応。 Python では行列は numpy array として扱われるので、OpenCV の関数でなく、numpy の関数を使っても同じ処理が行える。 …

OpenCV - connectedComponents() で連結成分のラベリング

概要 OpenCV の connectedComponents() で連結成分のラベリング (connected component labeling)を行う方法について紹介する。 概要 連結成分のラベリング 引数 返り値 構造情報付きで連結成分のラベリング 引数 サンプルコード 2値画像を読み込む。 連結成…

OpenCV - distanceTransform() で距離変換を行う

概要 OpenCV の distanceTransform() で距離変換を行う方法について紹介する。 概要 画像における距離の定義 距離変換 引数 ラベルマップを生成する。 引数 サンプルコード 参考

OpenCV - 画像を切り抜く方法について

概要 OpenCV で画像の一部を切り抜き、新しい画像を作成する方法について紹介する。 概要 解説 サンプルコード Python グレースケール形式 RGB 形式 C++

OpenCV - 画像にアフィン変換を適用する方法について

概要 OpenCV で画像にアフィン変換を適用する関数 warpAffine() について解説する。 この関数を利用することで、画像を回転、拡大縮小できる。また、応用的な使い方として、ある画像を別の画像に貼り付けることもできる。 概要 画像を回転させる。 引数 返り…

OpenCV - 画像座標系における回転、拡大縮小について

概要 画像座標系における回転、拡大縮小について解説し、OpenCV で回転行列を作成する方法を紹介する。 作成した回転行列で画像を回転させるには、以下の記事を参照されたい。pynote.hatenablog.com 概要 回転行列を作成する。 解説 サンプルコード

OpenCV - エッジの検出、微分フィルタ

概要 エッジ検出の理論及び OpenCV のコードについて 概要 試した環境 エッジ検出とは 微分 水平方向の微分フィルタ 垂直方向の微分フィルタ Prewitt フィルタ Sobel フィルタ 参考

OpenCV - モルフォロジー演算について

概要 モルフォロジー演算は主に二値画像を対象としたいくつかの非線形な演算を指す。 二値画像からノイズを削除したり、輪郭を抽出するのに役立つ。 概要 試した環境 構成要素 例 構成要素の作成 画像の端のピクセル 収縮 膨張 高度なモルフォロジー変換 演…

OpenCV - 画像の統計量を計算する

概要 画像から最小値、最大値、平均値、中央値、最頻値、分散、標準偏差といった各種統計量を計算する。 概要 試した環境 統計量 最小値 関数 コード 最大値 平均値 関数 コード 中央値 最頻値 分散 関数 コード 参考