Python+OpenCV 6種類のリアルタイム画像処理を詳しく解説
OpenCVの画像処理に初めて触れる方にとっては、ガウス関数やフィルタリング、閾値2値化など、頭を悩ませることが多いと思います。ここでは、カメラを通してリアルタイムかつダイナミックに各種画像処理の特徴を確認し、チューニングやテストの参考にもしていただけるような、小さなプロジェクトをご紹介します。
1. ライブラリファイルのインポート
ここでは、PySimpleGUI、cv2、numpyのライブラリファイルを使用します。PySimpleGUIはGUIによる視覚化のためのライブラリファイル、cv2はPythonのOpenCVのインターフェース、numpyは数値変換や演算のためのライブラリファイルで、これらはすべてpipでインポートすることが可能です。
mkvirtualenv -p /sur/bin/python3.5 ml3
2. GUIをデザインする
GUI設計を実装するPySimpleGUIライブラリファイルに基づいて、このプロジェクトのインタフェース設計は比較的簡単で、薄緑色の背景で800X400サイズのフレームを設計し、主に二つの部分:カメラインタフェース領域とコントロールボタン領域で構成されています。その効果は以下の通りです。
GUIコードは以下の通りです。
pip3 install Scikit-learn
3. カメラを呼び出す
パソコン内蔵カメラの電源を入れ、下図のようにGUIインターフェースにデータを表示します。
そのコードを以下に示す。
import sklearn
4. リアルタイム画像処理
4.1. 閾値処理による2値化
閾値['thresh_slider']より大きい値を255、小さい値を0として閾値二値化処理を行い、以下のような効果を得ることができます。
そのコードを以下に示す。
pip3 install jieba
4.2. エッジ検出
エッジ検出を行うために、values['canny_slider_a']は最小閾値、values['canny_slider_b']は最大閾値を表し、その効果は以下のようになります。
そのコードを以下に示す。
import jieba
jieba.cut("My name is Gan Fawn")
4.3. プロファイルテスト
輪郭検出は、形状解析や物体の検出・認識に有効なツールで、曲線の連続するすべての点(境界線に沿って)を同じ色または強度で結び、以下のような効果を発揮します。
そのコードを以下に示す。
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
# Read the data from the four tables
prior = pd.read_csv("/Users/mac/instacart/order_products__prior.csv")
products = pd.read_csv("/Users/mac/instacart/products.csv")
orders = pd.read_csv("/Users/mac/instacart/orders.csv")
aisles = pd.read_csv("/Users/mac/instacart/aisles.csv")
# Merge four tables into one (user-item categories)
_mg = pd.merge(priority, products, on=['product_id', 'product_id']) # both tables should have the key
_mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])
mt.head(10)
4.4. ガウシアンフィルタリング
ガウシアンフィルタリング、(21、21)はガウシアン行列の長さと幅が21であることを意味し、標準偏差は値['blur_slider']として取られます、効果は以下の通りです。
そのコードを以下に示す。
# cross table (special grouping tool)
cross = pd.crosstab(mt['user_id'], mt['aisle']) # specify two parameters, row and column
cross.head(10)
4.5. 色変換
色空間の変換、HSVからBGRへの変換は以下の通りです。
そのコードを以下に示す。
# Perform a principal component analysis
pca = PCA(n_components=0.9)
data = pca.fit_transform(cross) # Inputs must be row and column type so cross-tabulation is used before
data
4.6. コントラストを調整する
下図のように、画像の細部をシャープに見せるために、コントラストを強調します。
そのコードを以下に示す。
if values['enhance']:
enh_val = values['enhancement_slider'] / 40
clahe = cv2.createCLAHE(clipLimit=enh_val, tileGridSize=(8, 8))
lab = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)
lab[:, :, 0] = clahe.apply(lab[:, :, 0])
frame = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)
5. システムを終了する
ダイレクトブレイクでループを抜ける。
if event == 'Exit' or event is None:
break
以上、Python+OpenCV 6つのリアルタイム画像処理について詳しく説明しましたが、Python+OpenCVのリアルタイム画像処理については、スクリプトハウスの他の関連記事にもご注目ください
関連
-
[解決済み】Imageという名前のモジュールがない
-
[解決済み】TypeError: 'dict_keys' オブジェクトはインデックスをサポートしていません。
-
[解決済み】Matplotlibでサブプロットにタイトルを追加する方法
-
Pythonエラー集です。IndexError: スカラー変数へのインデックスが無効です。
-
[解決済み] ValueError: 未知のラベルタイプ:'unknown'
-
[解決済み] ImportError: Crypto.Cipher という名前のモジュールはありません。
-
[解決済み] ZeroDivisionError の取得: Python での float の除算
-
[解決済み] matlabのfminsearchのnumpy/scipyアナログ版
-
python send email encountered gaierror: [Errno 11004] getaddrinfo に失敗しました。
-
サポートされていないオペランド型 +: 'NoneType' および 'int'
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Sqlite3, OperationalError: unable to open database file.
-
[解決済み] Virtualenv OSError - setuptools pip wheel failed with error code 1
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] Python の curve_fit を複数の独立変数に対応させる
-
[解決済み] sys.stdin.readline() はプロンプトなしで読み、「間に何もない」を返します。
-
[解決済み] AWS DynamoDBでリスト属性に値を追加するには?
-
[解決済み] ポアソン回帰を実装するには?
-
[解決済み] Python のプロットにおける上付き添え字
-
python+Django Web開発例
-
AttributeError: module 'tensorflow' has no attribute 'ConfigProto'