PythonでOpenCVを使ったラベリング処理 前回の講座ではPythonでOpenCVを使わずにラベリング処理を学び、ラベリングの仕組みを理解できたかと思います。 今回は「PythonでOpenCVを使ったラベリング処理」を学んでいきます。 それぞれのバージョンはPython 3.8.2、OpenCV 4.2.0になります。また、今回の記事の内容はOpenCVの公式ドキュメントを参考にしています。 OpenCVでラベリング処理 OpenCVに実装されているラベリング処理は大きく分けて、 ①簡易版ラベリング(connectedComponents) ②詳細版ラベリング(connectedComponentsWithStats) 以上の2種類があります。 それぞれの違いと具体的な使い方について説明します。 簡易版ラベリング処理 簡易版は、戻り値がラベル数と入力画像と同じ大きさで、ラベル番号
理論¶ これまで輪郭に関する幾つかのチュートリアルを通してOpenCVが提供する輪郭関連の関数の使い方を学んできました. cv2.findContours() 関数に Contour Retrieval Mode のフラグに対して,普通は cv2.RETR_LIST か cv2.RETR_TREE を設定するとうまく輪郭検出が出来ていました.しかし,これらのフラグはいったい何を意味しているのでしょうか? また,三番目の出力である 階層情報(hierarchy) がありました.まだこのチュートリアルで取り上げていないこの階層情報とは何なのでしょか?輪郭検索モードのフラグとどのような関係にあるのでしょうか? このチュートリアルは上記のトピックを扱います. 階層情報とは何か?¶ 画像中の物体検出に cv2.findContours() 関数を使ってきましたよね?時には物体が難しい場所に位置してい
# キュービック補間 + 外れ値塗りつぶし + 極座標へリニアマッピング flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LINEAR # 引き数:画像, 変換後サイズ(幅、高さ)、中心座標(X座標、Y座標)、半径、変換フラグ linear_polar_image = cv2.warpPolar(image, (300, 1000), (480, 270), 220, flags) # 逆変換(リニア) flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LINEAR + cv2.WARP_INVERSE_MAP linear_polar_inverse_image = cv2.warpPolar(linear_polar_im
この投稿はOpenCV Advent Calendar 2020の14日目の記事です。 はじめに OpenCVのDNNモジュールで各モデルを試してみようというリポジトリで細々と動作を確認したりしています。 そのなかでClassificationやObject Detection、Pose Estimationなどのタスクのモデルはいろいろ動かしてみたけど、そういえばDepth Estimationのモデルは動かしたことなかったな…って思ったのでやってみました。 DNNモジュールとは? OpenCVでは機能ごとにモジュール(コア機能ならCore、GUI機能ならHighguiなど)に分かれており、ディープラーニングの推論機能を担当するのがDNNモジュールです。 学習はTensorflowやPyTorch、Darknetなどの各フレームワークやAzure Cognitive ServicesのC
こうやって数字だけを取り出したいです。 青い四角の4頂点の座標がわかればアフィン変換を実施して、数字だけを取り出すことができます。4頂点の座標を自動で取得したいと思います。 試行錯誤の記録を残しておきます。(最終的にはarucoマーカーを使うべきとの結論に至りました) 試行1 RGBの青色だけを取り出せばいいのではないか? 青色の枠は、Bの数値が高いのでそれを利用してedge detectionをすればいいのではないか。 img = cv2.imread("C:\\Users\\tegaki_1.jpg") img_resize = cv2.resize(img, (img.shape[1]//7,img.shape[0]//7)) img_B = img_resize[:,:,0] cv2.imshow('image',img_B) cv2.waitKey() 結論:失敗。青が白に消えて
問題設定 SLAMやSfMを使って1. 複数の画像毎のカメラパラメータと 2. グローバルな3Dモデル(点群やメッシュなど)がOpenCV座標系で得られている。 OpenGLベースのシステムで推定したカメラから3Dモデルをレンダリングしたい。 レンダリングした3Dモデルを実画像に重畳表示してエラーを確認する、といった用途が考えられる。 なにが問題? まずOpenCVとOpenGLは座標系が異なる。 同じ右手座標系であるが、OpenCVの各軸の向きはX: 右, Y: 下, Z: 前に対しOpenGLはX: 右, Y: 上, Z: 後である。 OpenCV座標系とOpenGL座標系はX軸周りに180°回転させた関係にある。 OpenGLのカメラはOpenCVのカメラを上下反転させ後ろ向きにしたものなので無変換でインポートしただけではもちろん意図したとおりの絵は出ない。 参照:http://ji
※ 過去にxRTechNagoya、XRMTGでフォトグラメトリとOpenCVについてLTしたものとほぼ同様の内容です。 この文書について 複数の写真から3Dデータを作成できるフォトグラメトリ。特別な機材もいらずにデータを生成できて素敵なのですが・・・ 3DF Zephyrでフォトグラメトリしていると、木の幹のように綺麗に取れる場合と、柱のようになんだか酷い事になる場合があると思います。 その原因についてフォトグラメトリの処理内容をOpenCVの本を読んでなんとなくまとめてみました。 (画像が多めなので縮小表示しています。クリックで原寸表示) まずは、上手くいく例 いかない例 下図は、4枚の写真を3DZFでテクスチャ付きメッシュを作成したものになります。(デフォルト設定で作成) ↓綺麗に立体化できるケース↓ ↓柱が残念ことになってるケース↓ フォトグラメトリの処理概要 まず、フォトグラメト
目的¶ このチュートリアルでは オプティカルフローの概念と,Lucas-Kanade法を使ったオプティカルフローの計算方法を学びます. 同画像中の特徴点の追跡のために cv2.calcOpticalFlowPyrLK() 関数などを使います. オプティカルフロー(Optical Flow)¶ オプティカルフローとは物体やカメラの移動によって生じる隣接フレーム間の物体の動きの見え方のパターンです.各ベクトルが1フレーム目から2フレーム目への変位ベクトルを表す2次元ベクトル場で表現されます.以下の画像(画像引用: Wikipedia article on Optical Flow) を見てください.
テクスチャの認識 次の問題どのように解きますか? もちろん人間が見れば④番だというのはすぐにわかりますが、AI(プログラム)を使ってやろうとすると少し考える必要があります。いろいろなやり方はあるかと思いますが、軽量で低コストなLocalBinaryPatternを使ったやり方を紹介します。 Local Binary Patternとは 1994年にフィンランドにあるオウル大学のT.Ojalaさん達によって提案1された特徴量です。LocalBinaryPattern(LBP)はその名前のとおり、画像の局所的な表現を特徴量としたもので、各画素を周囲の近傍画素と比較した相対値で構成されています。演算コストが低くて、画像の濃淡値の変動に強いといった特徴があり、1994年の最初の提案以降もいろいろな改良が加えられています。特に非ディープラーニング系では、顔画像認識や画像検索やテクスチャ分割、および動
OpenCV AI Kit(OAK)は、USBケーブルでホストコンピューターと接続するだけで、直ぐに最新のコンピュータービジョンシステムが利用できる小型ユニットです。 OpenCV AI Kit(OAK)は、コンピュータービジョン用ハードウェアとAPIソフトウェアで構成される小型ユニットです。インテルのMovidius Myriad X ビジョン・プロセシング・ユニット(VPU)を搭載しており、ホストコンピューターに負荷をかけずに、AIベースの画像処理を行うことができます。これまでなかった画期的なアイデアの製品であり、Kickstarterでは開始からわずか20分で目標額を達成するほどの人気を集めました。 今回は、実際に入手したOAK(OAK-1とOAK-Dの2種類)を使用し、具体的にどのような製品なのかをレポートさせていただきます。 第一部:OpenCV AI KITのキット内容 第二部
Mac(Intel)へのインストール Python環境には、MiniForgeを使っています。以下記事参照ください。 MiniForgeのセットアップが終わったら、ドキュメントを参考にインストールします。 具体的には、以下コマンドでMiniForge環境に関連ライブラリとdepthaiライブラリをインストールします。 $ conda create --name depthai python=3.8 $ conda activate depthai $ bash -c "$(curl -fL http://docs.luxonis.com/_static/install_dependencies.sh)" $ python3 -m pip install depthai Mac(Apple Silicon)へのインストール Apple Siliconでもセットアップできました。 以下を参考に
1. はじめに 2. 基本概念 2.1. 空間フィルタリングとは 2.2. 畳み込み演算とは 3. 平滑化の実装 3.1. 平均化フィルタ 3.1.1 python/numpy による実装 3.1.2 opencvによる実装 3.2. ガウシアンフィルタ 3.3. 応用 : 特定方向の平滑化 4. おわりに 5. 参考文献 1. はじめに 今回は、空間フィルタリングの基礎概念に触れて、いくつかの平滑化フィルタを実装します。 理解を深めるため, まず畳み込み演算から自力でnumpyで実装し, 次にOpenCVでのやり方と比較するという過程を踏みます。 2. 基本概念 2.1. 空間フィルタリングとは これまで触れてきたヒストグラム, トーンカーブ, 描画モードなどは, あくまで「ピクセルごと」のお話でした。つまり, 画像データでは本来, 「どのピクセルがどこにあるか」「隣接するピクセルは何か
考えを整理するための個人的なメモ的なものです。かたりぃなです。 画像・動画・音声などから特定の「もの」を認識したいことって多々ありますよね。 少なくとも私の中ではしょっちゅうあります。 さて、今回の記事は物体認識の問題色々調べた結果を自分の中で整理するためのメモです。 基本概念の整理が目的です。 物体認識とは まず物体認識とは何ぞや?という問いについて。物体認識を問題領域の観点から大別して2系統あるようです。 特定物体認識 一般物体認識 まず1について。これが私の欲しい物体認識です。 既知の物体Aについて、画像中のどこに物体Aが存在するか(もしくは存在しない)を調べる 2ですが、画像が何を示しているものなのかを言い当てる(車の画像!とか)物体認識です。 画像処理以外の方面の知識も必要となってくるので、こちらは当面は保留とします。 特定物体認識の古典的手法 古くからあるアルゴリズムとして、次
目的 Adobe Flashで作成されたサイトのUIの自動テストがしたい. http://www.adobe.com/jp/products/flashplayer.html 主に,Click,Drag & Drop, Double Clickなど. 問題点 Web Browserの自動テスト=Seleniumを使う,という安直な思考でSelenium Pythonを選択する. しかしながら,FlashはHTML上一つのオブジェクトとしてみなされるため,その子供の要素を指定する方法がSeleniumにはない. 解決案 Selenium Web Driver APIにmove_to_element_with_offset(to_element, xoffset, yoffset)というMethodがある.これを利用できないか 手順 Flashゲーム・艦隊これくしょんを例にして実装方法を説明す
カメラキャリブレーションと3次元再構成¶ このセクションで述べる関数は,いわゆるピンホールカメラモデルを取り扱います.つまりこのモデルでは,3次元座点を透視投影変換を用いて画像平面に射影することで,シーンのビューが構成されています. ここで はワールド座標系の3次元座標を表し は画像平面に投影された点の座標を表します. は,カメラ行列,またはカメラの内部パラメータ行列と呼ばれます. は主点(通常は画像中心), はピクセル単位で表される焦点距離です. したがって,あるファクタによってカメラ画像がスケーリングされている場合, このすべてのパラメータを同じファクタでスケーリング(それぞれが,拡大または縮小)する必要があります. 内部パラメータ行列はビューに依存しないので,一度推定すれば(ズームレンズの場合)焦点距離を固定している限りは繰返し使用することができます. 並進-回転の同次変換行列である
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く