画像ファイルをNumPy配列ndarrayとして読み込むと、NumPyの機能を使って様々な画像処理を行うことができる。 要素(画素)の値の取得や書き換え、スライスでのトリミング、結合などndarrayの操作がそのまま使えるので、NumPyに慣れている人はOpenCVなどのライブラリを使わなくても様々な処理ができる。 OpenCVを使う場合も、PythonのOpenCVでは画像データをndarrayとして扱うので、NumPy(ndarray)での処理を覚えておくと何かと便利。ほかにも、scikit-imageなど、画像をndarrayとして扱うライブラリは多い。 ここでは、基本的な画像ファイルの読み書きの方法として、 画像ファイルをNumPy配列ndarrayとして読み込む方法 NumPy配列ndarrayを画像ファイルとして保存する方法 と、NumPy(ndarray)での画像処理の例、
Python Imaging LibraryのImageクラスのデータをNumpyのarrayとして扱うための方法について。 Numpyの関数を使って直接pixel値を書き換えることが目標です。 まずは両方のライブラリをインポートしておきます。 import numpy import Image PILからNumpyのarrayへの変換 numpyで用意されているasarray関数を使うと、PILのImageオブジェクトを配列に変換することができます。 imgArray = numpy.asarray(pilImg) さらに配列の値を書き変えられるようにするためには、writeableフラグをTrueにする必要があるようです。 imgArray.flags.writeable = True NumpyのarrayからPILへの変換 PILのfromarrayメソッドによって、配列の各値を1
2019.01.14 エッジの検出は、Canny アルゴリズム、ラプラシアン、および Sobel アルゴリズムによって行うことができる。ここでは、次の写真を使って、植物領域のエッジを検出する例を示す。植物領域のエッジを検出したいので、ここでは BGR 写真をそのままグレースケース化せずに、緑色を検出するのに適している L*a*b* 色空間の a* 値を取り出して、エッジ検出に用いる。 Canny アルゴリズム Canny アルゴリズムでは、画像の輝度に対して微分を行い、その微分値が与えられた閾値の範囲に入っていれば、それをエッジとしている。そのため、Canny アルゴリズムを利用する使い場合は、画像の輝度に対する微分値の最小値と最大値の範囲を与える必要がある。次の例では、最小値を 30、最大値を 35 としている。 import numpy as np import cv2 img_BGR
2019.01.29 2 値化された画像の中に、非ゼロのピクセルが隣接してできた領域がある。このような非ゼロが隣接してつながった領域がオブジェクトとしてみなされる。例えば、下図では、4 つのオブジェクトが見られる。2 値画像では、情報を持つピクセルの値は 1 であり、情報を持たないピクセルの値は 0 であるので、画像に保存した際に、オブジェクトは白になる。 findContours メソッドの使い方 OpenCV では、オブジェクトの輪郭を検出するメソッド findContours が用意されている。このメソッドでは、画像中に含まれるすべてのオブジェクトを検出して、それぞれのオブジェクトにに有のラベル番号を振り分けている。ラベル番号は 1、2、3、・・・のようになり、オブジェクト分だけ振り分けられる。背景は、0 としてラベリングされる。このメソッドは、オブジェクトのラベリング結果とともに、
画像処理の分野は非常に幅広く用途を語ること自体がナンセンスかも知れませんが、以下に輪郭抽出を行ってから次に行う処理の代表格を3例紹介します。 ①面積を求める 輪郭とは閉じた線を意味するので、一度輪郭を抽出してしまえば輪郭を抽出したオブジェクトの面積を求めることが出来ます。 工場で製品のある面から見た面積を全数検査することでサイズに関する品質保証をしたり、定点観測しているオブジェクトの成長を自動的に定量評価する等、プログラム的に面積を求めることで様々な科学技術処理を自動化することができます。 ②周長を求める ①と同様に、大きさを観察する特徴量としては周長(Arc Length)もあります。面積は2値化して1になっているピクセルの総和を求めれば簡単に計算出来ますが、周長はそう簡単には行きません。 しかし、輪郭を一度抽出してしまえば周長の計算も容易となります。 ③重心を求める 輪郭を抽出するとい
以下のような画像から数字や横棒を残しつつ点線を削除したい。 方法はいくつか考えられるが、 一番最初に思いついたのはハフ変換を使って直線検出し、検出された線を画像から削除するという方法だった。 ただやってみると気づくのだが、検出された線の太さがわからないので、決め打ちの太さで線を打ち消すことになる。 上の画像みたいに太線と細線と点線が混じっている場合は、太い方を消すために、細い方の線に対しては本来線ではない部分も含めて削除することになる。 場合によっては隣接する文字を削ってしまい文字の判別が不可能になるかもしれない。 また、ハフ変換の場合は点線を直線として検出することができない場合がある。 よく考えると線が画像に対し水平垂直であるという前提条件がおけるのであれば、ハフ変換を用いるのは大仰である。 そこで、点線を含めて縦の線を削除するための簡単なアルゴリズムを作ったので紹介する。 アルゴリズム
ここでは、文字に対応する画素を「前景画素」と呼称して、一案を回答します。 ハフ変換で検出できる「直線」とは、簡単にいえば「直線的な前景画素の並び」です。 一方で、質問者さんがおっしゃる「太い線で書かれた文字」は、 人間にとっては「太い線」かもしれませんが、 画像上の画素の並び方でいえば、直線的な並びにはなっていないはずです。 ですから、今回の問題の解法としてハフ変換は適していないと思います。 対象画像がどのようなものかわからないのでなんとも言えませんが、 代わりに「前景画素が密集している」ことが文字領域の特徴になり得ませんか? コメントを見ますと漢字が比較的多いとのことですので、 文字以外の図形がスカスカの疎な線で描かれているのであれば、 前景画素の局所的な密度が使えそうな気がします。 具体的な処理例としては、 テンプレートマッチングのように画像全体を適当な大きさのウィンドウで走査し、 ウ
概要 画像の中の直線を検出する古典的な方法として,ハフ変換が有名です. ハフ空間上の点は直線の式に相当するものになります. たとえば,上のような写真の中から四角形の物体の頂点を取り出したい場合,ハフ空間上の点から求めた直線の式を連立して,直線どうしの交点を求める必要があります. とても簡単なことなのですが,巷の記事ではわざわざ $y=ax+b$ の形に直してから解いていたり,数値的に交点が求められていたりして若干微妙に感じるポイントがあります. いちいち解説している記事が見当たらない割によく使うため,書くことにします. ハフ空間上で表示された直線 ハフ空間上の点 $(\rho, \theta)$ は,つぎの直線を表すものになっています. $$ \rho = x \cos\theta + y \sin\theta $$ $y=ax+b$ にせずに交点を求める いま,$(\rho_1, \th
はじめに 非常に大きくて明るい流れ星は、まるで火の玉のように見えるため、火球(Bolide)と呼ばれます。 火球はまれに音を伴って流れることが知られています。 しかし、火球の高度は100~200 km程度1であり、音が聞こえるまでは少なくとも5分以上はかかるはずです。そのため、この音の原因は火球の発する電磁波であると考えられており、”電磁波音(Electrophonic sound)”と呼ばれています。 音の発生メカニズムとして様々なモデルが考案されていますが、いまだ統一的な説明はないようです2。そもそも火球自体が珍しい上、目撃者のうち10%ぐらいしか音を感じない3という現象なので、科学的な検証が非常に難しいという問題があります。 しかし最近、ツイッター上でこの音を観測した人がいらっしゃいました。 しかも動画付き。 この火球では、流星が光ると同時に音が鳴る電磁波音も捉えることができました。
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
アンチエイリアスを掛けると写真縮小時のジャギジャギが軽減します。フォルダ内の写真ファイルをアスペクト比(縦横比率)を保ったまま一括で縮小してアンチエイリアスを掛け保存するPythonコードです。 アンチエリアスあり/なし比較 4000pxくらいの写真を300pxに縮小して比較しました。AA有りの鳥画像は地面の小さな砂が、地面と色が一体化して見えにくくなっています。 インストール # -*- coding: utf-8 -*- import commands import Image import re # 縮小する際の画像の高さピクセル PHOTO_HEIGHT = 300 # 画像があるフォルダのフルパス BASE_DIR = "/Users/XXXXX/Desktop/Photos" # 画像の正規表現名 PHOTO_REGEX = r"P.*.[jpg|JPG]" # リサイズ後の画
Pillowは、開発が停止しているPIL(Python Image Library)からフォークされた画像処理ライブラリ。 Pillow is the “friendly PIL fork” by Alex Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lundh and Contributors. Pillow — Pillow (PIL Fork) 6.1.0 documentation OpenCVのようにコンピュータービジョン系の高度な画像処理(顔検出やオプティカルフローなど)はできないが、リサイズ(拡大・縮小)や回転、トリミング(部分切り出し)のような単純な処理が簡単にできる。 (好みの問題ではあるが)PillowのほうがOpenCVよりコードがシンプルでとっつきやすいので、目的によって使
Python Imaging Library(略称 PIL)は、プログラミング言語Pythonに、各種形式の画像ファイルの読み込み・操作・保存を行う機能を提供するフリーのライブラリである。Windows、Mac OS X、Linuxで利用することができる。2009年9月にリリースされた最新版のPIL 1.1.7では、Python 1.5-2.7をサポートしているが、Python 3のサポートは「後に」なるとされている[3]。 開発は、2011年のPILレポジトリへのコミットを最後に停止しているとみられる[2]。そのため、Pillowという後継のプロジェクトがPILのリポジトリをフォークし、Python 3のサポートなどを追加している[4]。 Pillowは、オリジナルのPILの後継として、Debian[5]やUbuntu[6](13.04から)などのLinuxディストリビューションで採用さ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く