タグ

OpenCVに関するotori334のブックマーク (85)

  • OpenCV・Pythonで画像から5本の直線をまとめて検出したいです

  • 領域(輪郭)の特徴 — OpenCV-Python Tutorials 1 documentation

    領域(輪郭)の特徴である面積,周囲長,重心,外接矩形などについて学びます. 領域(輪郭)を対象とした様々な関数について学ぶことになります. 1. モーメント¶ 画像のモーメントは物体の重心,面積などを計算するのに役立ちます.詳細についてはWikipediaの 画像モーメント(英語) のページを参照してください. cv2.moments() 関数はあらゆるモーメントを計算します.: import cv2 import numpy as np img = cv2.imread('star.jpg',0) ret,thresh = cv2.threshold(img,127,255,0) imgEdge,contours,hierarchy = cv2.findContours(thresh, 1, 2) cnt = contours[0] M = cv2.moments(cnt) print

  • 画像処理のあれこれ1  閾値自動選定法の多クラス問題への応用|伊藤 桂一(アダコテック)

    2020/07/17追記 下記のような情報に見つけたので、実験画像の差し替えを行いました。 https://srad.jp/story/20/07/15/117231/ はじめまして初めましてアダコテックの伊藤です。製造業に向けた異常検知のAIソフトウェアを提供する㈱アダコテックでエンジニア兼取締役をしています。 エンジニアとしては、コア技術の研究開発、顧客から依頼されたPOCの実施などのを行っています。 仕事以外ではエンジニア仲間と飲みに行ったり、週末は息子と釣りに行ったりしています。(今は、コロナで自粛中ですが・・・) 弊社では、国立研究開発法人産業技術総合研究所(産総研)で発明された高次局所自己相関特徴量(HLAC)(*1)という特徴抽出法を使った異常検出ソリューションの開発・販売を行っております。 この技術を発明された大津展之先生をはじめとした先生方に弊社技術顧問として関わって頂き

    画像処理のあれこれ1  閾値自動選定法の多クラス問題への応用|伊藤 桂一(アダコテック)
    otori334
    otori334 2021/05/31
    “閾値自動選定法を多クラスに応用する事でN値化画像を生成する事が可能” クラス数Nは普通の閾値などで予め決めておく必要がある.適切なNとは
  • OpenCVを使ったブロブ検知の概要 - Deha magazine

  • OpenCV ブロブ(粒子解析) 再考

  • エッジ検出 | OpenCV (Python3) を利用したエッジ検出

    2019.01.14 エッジの検出は、Canny アルゴリズム、ラプラシアン、および Sobel アルゴリズムによって行うことができる。ここでは、次の写真を使って、植物領域のエッジを検出する例を示す。植物領域のエッジを検出したいので、ここでは BGR 写真をそのままグレースケース化せずに、緑色を検出するのに適している L*a*b* 色空間の a* 値を取り出して、エッジ検出に用いる。 Canny アルゴリズム Canny アルゴリズムでは、画像の輝度に対して微分を行い、その微分値が与えられた閾値の範囲に入っていれば、それをエッジとしている。そのため、Canny アルゴリズムを利用する使い場合は、画像の輝度に対する微分値の最小値と最大値の範囲を与える必要がある。次の例では、最小値を 30、最大値を 35 としている。 import numpy as np import cv2 img_BGR

  • オブジェクト輪郭検出 | OpenCV / findContours を使用して画像中のオブジェクトの輪郭を検出する方法

    2019.01.29 2 値化された画像の中に、非ゼロのピクセルが隣接してできた領域がある。このような非ゼロが隣接してつながった領域がオブジェクトとしてみなされる。例えば、下図では、4 つのオブジェクトが見られる。2 値画像では、情報を持つピクセルの値は 1 であり、情報を持たないピクセルの値は 0 であるので、画像に保存した際に、オブジェクトは白になる。 findContours メソッドの使い方 OpenCV では、オブジェクトの輪郭を検出するメソッド findContours が用意されている。このメソッドでは、画像中に含まれるすべてのオブジェクトを検出して、それぞれのオブジェクトにに有のラベル番号を振り分けている。ラベル番号は 1、2、3、・・・のようになり、オブジェクト分だけ振り分けられる。背景は、0 としてラベリングされる。このメソッドは、オブジェクトのラベリング結果とともに、

  • numpy.ndarray.astype(numpy.uint8)の落とし穴【Python/Numpy】 – 開発記録

    float64やint32のndarrayをuint8に型変換した時に自動的に近い境界値に丸めてくれると思っていたのですがそうではないようです。 OpenCVで画像を読み込んでNumPyで弄った後に符号無し8ビット整数に変換して書き出そうとした時に躓いたのでメモ。 概要 元の型より精度が低い整数型への型変換numpy.ndarray.astype(dtype)は変換前にnumpy.ndarray.clip(min, max)をすべきです。 例えば、a.astype(np.uint8)する時は以下のようにa.clip(0, 255)で値を先に制限します。 >>> import numpy as np >>> a = np.array([-1, 0, 255, 256]) # こうではなくて >>> a.astype(np.uint8) array([255, 0, 255, 0], dtyp

  • Python/OpenCVで画像内オブジェクトの輪郭抽出をする | WATLAB -Python, 信号処理, 画像処理, AI, 工学, Web-

    画像処理の分野は非常に幅広く用途を語ること自体がナンセンスかも知れませんが、以下に輪郭抽出を行ってから次に行う処理の代表格を3例紹介します。 ①面積を求める 輪郭とは閉じた線を意味するので、一度輪郭を抽出してしまえば輪郭を抽出したオブジェクトの面積を求めることが出来ます。 工場で製品のある面から見た面積を全数検査することでサイズに関する品質保証をしたり、定点観測しているオブジェクトの成長を自動的に定量評価する等、プログラム的に面積を求めることで様々な科学技術処理を自動化することができます。 ②周長を求める ①と同様に、大きさを観察する特徴量としては周長(Arc Length)もあります。面積は2値化して1になっているピクセルの総和を求めれば簡単に計算出来ますが、周長はそう簡単には行きません。 しかし、輪郭を一度抽出してしまえば周長の計算も容易となります。 ③重心を求める 輪郭を抽出するとい

    Python/OpenCVで画像内オブジェクトの輪郭抽出をする | WATLAB -Python, 信号処理, 画像処理, AI, 工学, Web-
  • OpenCVを使って点線を含めた縦棒を画像から削除する - いわゆる備忘録

    以下のような画像から数字や横棒を残しつつ点線を削除したい。 方法はいくつか考えられるが、 一番最初に思いついたのはハフ変換を使って直線検出し、検出された線を画像から削除するという方法だった。 ただやってみると気づくのだが、検出された線の太さがわからないので、決め打ちの太さで線を打ち消すことになる。 上の画像みたいに太線と細線と点線が混じっている場合は、太い方を消すために、細い方の線に対しては来線ではない部分も含めて削除することになる。 場合によっては隣接する文字を削ってしまい文字の判別が不可能になるかもしれない。 また、ハフ変換の場合は点線を直線として検出することができない場合がある。 よく考えると線が画像に対し水平垂直であるという前提条件がおけるのであれば、ハフ変換を用いるのは大仰である。 そこで、点線を含めて縦の線を削除するための簡単なアルゴリズムを作ったので紹介する。 アルゴリズム

    otori334
    otori334 2021/05/28
    “線が画像に対し水平垂直であるという前提条件がおけるのであれば、ハフ変換を用いるのは大仰である”
  • Pythonを用いて流れ星の音(electrophonic sound)を解析する - Qiita

    はじめに 非常に大きくて明るい流れ星は、まるで火の玉のように見えるため、火球(Bolide)と呼ばれます。 火球はまれに音を伴って流れることが知られています。 しかし、火球の高度は100~200 km程度1であり、音が聞こえるまでは少なくとも5分以上はかかるはずです。そのため、この音の原因は火球の発する電磁波であると考えられており、”電磁波音(Electrophonic sound)”と呼ばれています。 音の発生メカニズムとして様々なモデルが考案されていますが、いまだ統一的な説明はないようです2。そもそも火球自体が珍しい上、目撃者のうち10%ぐらいしか音を感じない3という現象なので、科学的な検証が非常に難しいという問題があります。 しかし最近、ツイッター上でこの音を観測した人がいらっしゃいました。 しかも動画付き。 この火球では、流星が光ると同時に音が鳴る電磁波音も捉えることができました。

    Pythonを用いて流れ星の音(electrophonic sound)を解析する - Qiita
  • opencv3で文字領域検出しようとしてハマった話「mac」 - Qiita

    opencvははじめはmakeしたりしたけどうまくいかないので、brewで入れた 拡張機能はcondaなどでも提供されてないのです。 ソースここ https://github.com/miyamotok0105/opencv3_textdetection 結論から言うとチューニングが大変。もっと簡単にいくよとかありましたら意見お待ちしてます。 やりたかったことこいつ 文字領域検出用のERFilterの使い方 opencvで領域検出できるらしい。 opencvのバージョン3でさらに拡張機能なのですね。 まだちゃんとテストできてなかったりする機能はこっちに入ってるそうな。 公式 https://github.com/opencv/opencv_contrib 入れてみると python textdetection.py scenetext_word01.jpg A demo script of

    opencv3で文字領域検出しようとしてハマった話「mac」 - Qiita
  • 画像処理入門講座 : OpenCVとPythonで始める画像処理 | POSTD

    この記事を書くに至ったきっかけ Recruse Centerでは、私は、画像処理の勉強に時間を費やしていました。独学をし始めた頃は、何をするものなのか全く理解しておらず、ただ、文字や輪郭、模様などを識別するのに役立ち、これらで面白いことができる、ということくらいの知識しかありませんでした。 私の情報源は、主にWikipediaや書籍、公開されている大学の講義ノートです。これらの資料に慣れ親しんでくるにつれ、画像処理の世界における基礎を伝えられる「入門向け画像処理」を望むようになりました。 これが、この記事を書こうと思ったきっかけです。 前提条件 この記事は、Pythonが扱えるということを前提に書いています。その他の事前知識は必要ありませんが、NumPyや行列計算に慣れていると理解しやすいでしょう。 初めに 使用するのは、PythonOpenCVPython 2.7 ^(1) 、iPy

    画像処理入門講座 : OpenCVとPythonで始める画像処理 | POSTD
  • OpenCV – distanceTransform で距離変換を行う方法 | pystyle

    概要 OpenCV の cv2.distanceTransform() で距離変換を行う方法について解説します。 画像における距離の定義 2 つの画素を $(x_1, y_1), (x_2, y_2)$ としたとき、距離関数には次の種類があります。 $L^\infty$ ノルム: $\max(|x_1 – x_2|, |y_1 – y_2|)$ $L1$ ノルム (マンハッタン距離): $|x_1 – x_2| + |y_1 – y_2|$ $L2$ ノルム (ユークリッド距離): $\sqrt{(x_1 – x_2)^2 + (y_1 – y_2)^2}$ 画像における距離 距離変換 (distance transform) とは、2 値画像を入力として、各画素から最も近い画素値 0 までの距離を計算し、距離マップ (distance map) を作成する処理です。 距離変換 cv2.d

    OpenCV – distanceTransform で距離変換を行う方法 | pystyle
  • モルフォロジー変換 — OpenCV-Python Tutorials 1 documentation

    目的¶ このチュートリアルでは, 膨張処理,収縮処理といったモルフォロジー処理について学びます. 以下の関数の使い方を学びます : cv2.erode(), cv2.dilate(), cv2.morphologyEx() etc. 理論¶ モルフォロジー変換は主に二値画像を対象とし,画像上に写っている図形に対して作用するシンプルな処理を指します.モルフォロジー変換には入力画像と 処理の性質を決める 構造的要素 ( カーネル )の二つを入力とします.基的なモルフォロジー処理として,収縮(Erosion)と膨張(Dilation)が挙げられます.他には,この二つの処理を組み合わせたオープニングとクロージングといった処理も挙げられます.このチュートリアルでは,これらの処理を一つ一つ紹介していきます. 1. 収縮(Erosion)¶ 収縮のアイディアは縮む珪藻から来ており,前景物体の境界が浸

  • 輪郭: 初めの一歩 — OpenCV-Python Tutorials 1 documentation

    輪郭とは何なのか理解します 輪郭の検出方法,描画方法を学びます 以下の関数の使い方を学びます : cv2.findContours(), cv2.drawContours() 輪郭とは何か?¶ 輪郭とは同じ色や値を持つ(境界線に沿った)連続する点をつなげて形成される曲線のことです.形状解析や物体追跡,認識お有用なツールになります. 精度よく輪郭を検出するために,二値日画像を使います.そのため,まずはじめにしきい値処理やCannyのエッジ検出などで二値画像を取得します. cv2.findContours() 関数は入力画像を変える処理です.輪郭検出後の処理で入力画像を使用する必要がある場合は,別の変数としてコピーしてください. OpenCVの輪郭検出は,黒い背景から白い物体の輪郭を検出すると仮定しています.物体は白(明るい色),背景は黒(暗い色)と覚えておいてください. import num

  • OpenCV-Python 演習/tutorial_008py

  • pythonとOpenCVで歪み補正 - haitenaipants’s blog

    書類をスキャンしたときは、画像が傾いているのみならず、歪んでいる場合がある。 この歪みをpythonで直すためのプログラム。ただし、大きな枠があり、歪みが小さい場合に限る。 大まかな流れ : イ)四角い枠の角の座標を取得する。(一番外側の線は紙そのものの輪郭) ロ)台形補正で歪みを直す。 以下のサイトを参考にした。(と言うかほとんどそのままです。当ごめんなさい。) opencv で マーカー付き用紙の向きを直してみる - 機械学習備忘録 opencv で カードの向きを直してみる - 機械学習備忘録 1)角の座標の取得 (1−1)輪郭検出 適当な画像を用意し(ここでは、test.png)、以下のコードを実行する。 import cv2 import numpy as np img = cv2.imread("test.png") gray = cv2.cvtColor(img, cv2.

    pythonとOpenCVで歪み補正 - haitenaipants’s blog
  • OpenCVで台形補正がしたかった話。応用編。 - Qiita

    OpenCVで台形補正したい! と思ってネットサーフィンしてたんですが、以下のような問題が。 二値化する時のパラメータの根拠って何? 出力座標の値の根拠って何? そもそも四角形じゃない場合どうなるの? どこに転がってるサンプルコードも共通でこんな感じでした。 定数で書かれてて、コメントもなかったら、何の根拠でその数字なのか分からないよ... (サンプルコードだから許せるけど、仕事だったら白目になるやつ) 参考にさせてもらったコード OpenCVを使って画像の射影変換をしてみるwithPython こちら拝借させていただきました。 勝手に使って申し訳ありません、、、 とりあえず最終形 import sys import cv2 import numpy as np # ファイル名取得 if len(sys.argv) < 2: print("Usage: $ python " + sys.a

    OpenCVで台形補正がしたかった話。応用編。 - Qiita
  • OpenCVを使ってマウスイベント(手動)でテニスコート領域を選択できるようにする - Qiita

    やりたいこと ↓の画像のようにテニスコート領域をマウスイベントで選択できるようにします。 具体的には、コート隅の4点をクリックすることで、テニスコート領域を作成します。 テニスボールの着弾点などを記録できるようにしようとしてますが、テニスコート内のどの位置に着弾したかを確認するためには、コートの座標情報が必要となります。 ちなみに、自分の過去記事ですが、OpenCV(Python版)でテニスのボール軌道を検出するなんてこともやってます。 参考にしたサイト その辺うろうろ27km / Python + OpenCV でマウスイベントを取得 こちらのサイトは、コードのかなりの部分を流用させていただきました。 PythonOpenCVで画像処理④【マウスイベント】 onMouse関数についてわかりやすく説明されています。 mouse_event関数の中にマウスイベントで処理する内容を記述 1つ

    OpenCVを使ってマウスイベント(手動)でテニスコート領域を選択できるようにする - Qiita