OpenCVに習熟した3時間(5)-パースペクティブ変換

0.準備

新しく作成したプロジェクトを右クリックし、[Pythonファイル]を選択して新しいPythonファイルを作成import cv2し、最初にcv2ライブラリをインポートして、import numpy名前をに変更しnpます。

import cv2
import numpy as np

ここに画像の説明を挿入
また、OpenCVでは、座標軸の方向が右にx軸、下にy軸、座標原点が左上隅にあることも知っておく必要があります。たとえば、次の図は640ピクセルです。長さと幅480ピクセル。では、このセクションの調査を始めましょう。
ここに画像の説明を挿入

1.シナリオの説明

任意の画像を指定して、そこから必要な領域をセグメント化し、指定されたサイズで表示します。さらに、セグメント化された画像は、線形空間で表示されたウィンドウと平行のままです。例:下のKを取得します。元の画像では、Kは横になっており、セグメンテーション後に直立している必要があります。では、この効果をどのように達成するのでしょうか?
ここに画像の説明を挿入
上記の効果を実現する前に、上の写真のトランプKの4つの座標点など、いくつかの重要な情報を取得する必要があります。描画ツールを使用してこの画像を開き、分割された領域の4つのポイントにマウスを置いて、座標情報を取得できます。

因为画图中图像的宽高坐标轴和OpenCV是一样的,
当我将鼠标放到K左上角时,画图的左下角就显示出来(734像素,185像素),
这就是左上角这个点的坐标。

ここに画像の説明を挿入

2.パースペクティブトランスフォーメーション

上記の要件を達成するのは難しいようですが、cv2ライブラリを使用すると、実際に実装するコードは9行だけです。

  1. まず、出力画像の幅を250に、高さを350に設定します。
  2. 次に、上の写真である私たちの写真を読んでください。
  3. ターゲット領域の4つのポイント、つまり左上、右上、左下、右下の座標を定義します。前のステップで取得しました。
  4. pst2は、額縁内の出力画像の位置です。タイル表示と書き込み方法の修正を選択できます。
  5. ライブラリ関数warpPerspectiveを使用して遠近法変換を実装すると、興味のある人は原理についてさらに学ぶことができます。
  6. 最後に2つの画像を出力して表示します。
width,height=250,350
img=cv2.imread("Resources/poker.jpg")
pst1=np.float32([[734,185],[1101,266],[621,679],[1030,789]])
pst2=np.float32([[0,0],[width,0],[0,height],[width,height]])
matrix=cv2.getPerspectiveTransform(pst1,pst2)
imgOutput=cv2.warpPerspective(img,matrix,(width,height))

cv2.imshow("Image",img)
cv2.imshow("Output",imgOutput)
cv2.waitKey(0)

効果を見てみましょう。左の画像は遠近法で変換された画像で、右の画像は元の画像です。
ここに画像の説明を挿入

5番目のセクションの内容は実際には非常に興味深いものであり、人生で多くの用途があります。一度手を通り抜けて、一度手でノックするよりも、千回目を通したほうがいいですよ〜

おすすめ

転載: blog.csdn.net/qq_42257666/article/details/122920896