導入
エッジ検出はコンピューター ビジョンの基礎であり、画像内のオブジェクトの境界を識別できるようになります。このチュートリアルでは、Python と OpenCV で Sobel オペレーターと Canny エッジ検出器を使用してエッジ検出を実装します。次に、ユーザーが画像をアップロードして結果を表示できるように、Flask を使用して、Bootstrap でスタイル設定された単純な Web アプリケーションを作成します。
デモリンク: エッジ検出デモ
前提条件
- Python 3.x がマシンにインストールされています。
- Python プログラミングの基礎知識
- HTML と CSS に精通していると役立ちますが、必須ではありません。
環境のセットアップ
1. 必要なライブラリをインストールする
ターミナルまたはコマンド プロンプトを開いて、次のコマンドを実行します。
pip install opencv-python numpy Flask
2. プロジェクトディレクトリを作成する
mkdir edge_detection_app cd edge_detection_app
エッジ検出の実装
1. ソーベルオペレーター
Sobel オペレーターは、エッジを強調して画像の強度の勾配を計算します。
コードの実装:
import cv2 # Load the image in grayscale image = cv2.imread('input_image.jpg', cv2.IMREAD_GRAYSCALE) if image is None: print("Error loading image") exit() # Apply Sobel operator sobelx = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=5) # Horizontal edges sobely = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=5) # Vertical edges
2. Canny エッジ検出器
Canny エッジ検出器は、エッジを検出するための多段階アルゴリズムです。
コードの実装:
# Apply Canny edge detector edges = cv2.Canny(image, threshold1=100, threshold2=200)
Flask Web アプリケーションの作成
1. Flask アプリをセットアップする
app.py という名前のファイルを作成します:
from flask import Flask, request, render_template, redirect, url_for import cv2 import os app = Flask(__name__) UPLOAD_FOLDER = 'static/uploads/' OUTPUT_FOLDER = 'static/outputs/' app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['OUTPUT_FOLDER'] = OUTPUT_FOLDER # Create directories if they don't exist os.makedirs(UPLOAD_FOLDER, exist_ok=True) os.makedirs(OUTPUT_FOLDER, exist_ok=True)
2. ルートを定義する
アップロードルート:
@app.route('/', methods=['GET', 'POST']) def upload_image(): if request.method == 'POST': file = request.files.get('file') if not file or file.filename == '': return 'No file selected', 400 filepath = os.path.join(app.config['UPLOAD_FOLDER'], file.filename) file.save(filepath) process_image(file.filename) return redirect(url_for('display_result', filename=file.filename)) return render_template('upload.html')
画像処理関数:
def process_image(filename): image_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) # Apply edge detection sobelx = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=5) edges = cv2.Canny(image, 100, 200) # Save outputs cv2.imwrite(os.path.join(app.config['OUTPUT_FOLDER'], 'sobelx_' + filename), sobelx) cv2.imwrite(os.path.join(app.config['OUTPUT_FOLDER'], 'edges_' + filename), edges)
結果ルート:
@app.route('/result/<filename>') def display_result(filename): return render_template('result.html', original_image='uploads/' + filename, sobelx_image='outputs/sobelx_' + filename, edges_image='outputs/edges_' + filename) </filename>
3. アプリを実行する
if __name__ == '__main__': app.run(debug=True)
ブートストラップを使用した Web アプリケーションのスタイル設定
スタイル設定のために HTML テンプレートに Bootstrap CDN を含めます。
1. アップロード.html
テンプレート ディレクトリを作成し、upload.html を追加します。
<meta charset="UTF-8"> <title>Edge Detection App</title> <!-- Bootstrap CSS CDN --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <div class="container mt-5"> <h1 id="Upload-an-Image-for-Edge-Detection">Upload an Image for Edge Detection</h1> <div class="row justify-content-center"> <div class="col-md-6"> <form method="post" enctype="multipart/form-data" class="border p-4"> <div class="form-group"> <label for="file">Choose an image:</label> <input type="file" name="file" accept="image/*" required class="form-control-file" id="file"> </div> <button type="submit" class="btn btn-primary btn-block">Upload and Process</button> </form> </div> </div> </div>
2.結果.html
テンプレート ディレクトリに result.html を作成します。
<meta charset="UTF-8"> <title>Edge Detection Results</title> <!-- Bootstrap CSS CDN --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <div class="container mt-5"> <h1 id="Edge-Detection-Results">Edge Detection Results</h1> <div class="row"> <div class="col-md-6 mb-4"> <h4 id="Original-Image">Original Image</h4> <img src="%7B%7B%20url_for('static',%20filename=original_image)%20%7D%7D" alt="Original Image" class="img-fluid rounded mx-auto d-block"> </div> <div class="col-md-6 mb-4"> <h4 id="Sobel-X">Sobel X</h4> <img src="%7B%7B%20url_for('static',%20filename=sobelx_image)%20%7D%7D" alt="Sobel X" class="img-fluid rounded mx-auto d-block"> </div> <div class="col-md-6 mb-4"> <h4 id="Canny-Edges">Canny Edges</h4> <img src="%7B%7B%20url_for('static',%20filename=edges_image)%20%7D%7D" alt="Canny Edges" class="img-fluid rounded mx-auto d-block"> </div> </div> <div class="text-center mt-4"> <a href="%7B%7B%20url_for('upload_image')%20%7D%7D" class="btn btn-secondary">Process Another Image</a> </div> </div>
アプリケーションの実行とテスト
1. Flask アプリを実行する
python app.py
2. アプリケーションにアクセスします
Web ブラウザを開いて http://localhost:5000 に移動します。
- 画像をアップロードし、「アップロードして処理」をクリックします。
- エッジ検出結果を表示します。
サンプル結果
結論
Sobel オペレーターと Canny エッジ検出器を使用してエッジ検出を実行する単純な Web アプリケーションを構築しました。 Python、OpenCV、Flask、Bootstrap を統合することで、ユーザーが画像をアップロードしてエッジ検出結果を表示できる対話型ツールを作成しました。
次のステップ
- アプリケーションの強化: エッジ検出オプションを追加するか、パラメータ調整を可能にします。
- UI の改善: ユーザー エクスペリエンスを向上させるために、より多くの Bootstrap コンポーネントを組み込みます。
- さらに詳しく調べる: Heroku や AWS などの他のプラットフォームにアプリをデプロイします。
GitHub リポジトリ: エッジ検出アプリ
以上がPython と OpenCV を使用したエッジ検出の実装: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

AlaySaregenerallymorememory-effictient forstring forstring inumericaldataduetotheirfixed-sizenature anddirectmoryaccess.1)AraysstoreElementsinaCourowlock、Reducingoverheadfrompointertersormetadata.2)リスト

ToconvertaPythonlisttoanarray,usethearraymodule:1)Importthearraymodule,2)Createalist,3)Usearray(typecode,list)toconvertit,specifyingthetypecodelike'i'forintegers.Thisconversionoptimizesmemoryusageforhomogeneousdata,enhancingperformanceinnumericalcomp

Pythonリストは、さまざまな種類のデータを保存できます。サンプルリストには、整数、文字列、フローティングポイント番号、ブール膜、ネストされたリスト、辞書が含まれています。リストの柔軟性は、データ処理とプロトタイピングにおいて価値がありますが、コードの読みやすさと保守性を確保するためには注意して使用する必要があります。

Pythondoesnothavebuiltinarays; usethearmoduleformemory-efficienthogeneousdatastorage、while-lelistSareversatileformixeddatypes.Arraysareeffientive for forlardatedateSetsetype、wheneasofferistofibuliestibuliestuseduseerieartusedoersorerdatatess。

sostCommonlylysedModule forcreatinginpythonisnumpy.1)numProvidesefficientToolsForArrayoperations、理想的なfornumericaldata.2)arrayscanbecreatedusingnp.array()for1dand2dstructures.3)

toAppendElementStoapyThonList、usetheappend()methodforsingleelements、extend()formultipleElements、andinsert()forspecificopsitions.1)useappend()foraddingoneElementatheend.2)useextend()toaddmultipleelementseffictience.3)

To CreateapythonList、usesquareBrackets []およびSeparateItemswithcommas.1)listsaredynamicandcanholdmixdatatypes.2)useappend()、remaid()、andslicingformanipulation.3)listcompreheNsionsionsionsionsionsionsionsionsionsionsionsionsionsionsionsionsionsientionforcreating.4)

金融、科学研究、医療、およびAIの分野では、数値データを効率的に保存および処理することが重要です。 1)財務では、メモリマッピングされたファイルとnumpyライブラリを使用すると、データ処理速度が大幅に向上する可能性があります。 2)科学研究の分野では、HDF5ファイルはデータストレージと取得用に最適化されています。 3)医療では、インデックス作成やパーティション化などのデータベース最適化テクノロジーがデータのパフォーマンスを向上させます。 4)AIでは、データシャーディングと分散トレーニングがモデルトレーニングを加速します。システムのパフォーマンスとスケーラビリティは、適切なツールとテクノロジーを選択し、ストレージと処理速度の間のトレードオフを検討することにより、大幅に改善できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
