Python-OpenCV の基本的な操作方法については、以下のエディターで詳しく説明していますので、参考にしていただければ幸いです。エディターをフォローして一緒に見てみましょう
基本属性
cv2.imread (ファイル名、属性) 画像を読み取ります
属性: 画像がファイルを読み取る方法を指定します
cv2.IMREAD_COLOR :カラー画像の読み込み、デフォルトパラメータ、Opencv は BGR モードでカラー画像を読み込みます。 ! !注
cv2.IMREAD_GRAYSCALE: グレースケール画像を読み取ります。
cv2.imshow (ウィンドウ名、画像ファイル) 表示画像
複数のウィンドウを作成可能
cv2.waitKey() キーボードバインド関数
この関数は、特定の数ミリ秒間待機して、入力されたかどうかを確認しますキーボード。
cv2.namedWindow(ウィンドウ名, 属性) ウィンドウを作成します
Attribute: ウィンドウサイズモードを指定します
cv2.WINDOW_AUTOSIZE: 画像サイズに基づいてサイズを自動的に作成します
cv2.WINDOW_NORMAL: ウィンドウサイズは調整可能
cv2. destroyAllWindows (ウィンドウ名) 作成したウィンドウを削除します
コード例:
import cv2 img=cv2.imread('test.py',cv2.IMREAD_COLOR) cv2.namedWindow('image',cv2.WINDOW_NORMAL) cv2.imshow('image',img) cv2.waitKey(0) cv2.destoryAllWindows()
cv2.imwrite (画像名を保存、画像を保存する必要があります) 画像を保存
コード例:
import cv2 img=cv2.imread('test.png',0) cv2.imshow('image',img) k=cv2.waitKey(0) if k==27: #等待 ESC 键 cv2.destoryAllWindows() elif k==ord('s') #等待 's' 键来保存和退出 cv2.imwrite('messigray.png',img) cv2.destoryAllWindows()
画像に対するいくつかの操作
0x01。画像属性を取得します
0x02。画像を処理するとき、一部の情報を直接出力します。画像のテキスト形式
cv2.putText (画像名、テキスト、座標、テキストの色) 0x03。画像のズームと保存を実装します。これは、次の場合に一般的な操作です。 OpenCVを使用します。 cv2.resize() は、さまざまな補間アルゴリズムをサポートしています。デフォルトでは、縮小に最適なアルゴリズムは cv2.INTER_AREA です。拡大に最適なのは cv2.INTER_LINEAR です。
import cv2 img=img.imread('test.png') print img.shape #(768,1024,3) print img.size #2359296 768*1024*3 print img.dtype #uint8
または:res=cv2.resize(image,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
スケール係数は後で設定されるため、ここには出力画像のサイズを指定する必要はありません
0x04。ええ
移動とは画像の位置を変更することであり、移動距離が (tx, ty) の場合、(x, y) 方向に移動する必要があります。オフセット行列 M を構築する必要があります。
たとえば、画像 (100,50) を変換します
res=cv2.resize(image,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
ここで、(cols, rows) は出力画像のサイズを表し、M は変換行列、100 は出力画像のサイズを表しますx のオフセット、50 y のオフセットをピクセル単位で表します。
0x05. 画像の回転
OpenCV では、まず、cv2.getRotationMatrix2D を通じて取得される回転行列を構築する必要があります。
cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])
アフィン変換では、元の画像内のすべての平行線が結果の画像内で等しく平行になります。オフセット行列を作成するには、元のイメージ内の 3 つの点と、出力イメージ内のそれらの位置を見つける必要があります。次に、OpenCV は 2*3 行列を作成するための cv2.getAffineTransform を提供し、最後に行列を関数 cv2.warpAffine に渡します。
import cv2 img=cv2.imread('test.png',1) rows,cols,channel=img.shape M=np.float32([[1,0,100],[0,1,50]]) dst=cv2.warpAffine(img,M,(cols,rows)) cv2.imshow('img',dst) cv2.waitKey(0) cv2.destoryALLWindows()
0x07。視点変換ビュー変換には 3*3 変換行列が必要です。変形の前後でも直線がまっすぐであることを確認してください。この行列を構築するには、入力画像内の 4 つの点と、出力画像内のそれらの対応する位置を見つける必要があります。これら 4 つの点のうち 3 つが同一線上にあることはできません。変換行列 OpenCV は、cv2.getPerspectiveTransform() 構造を提供します。次に、行列を関数 cv2.warpPerspective に渡します。
import cv2 img=cv2.imread('test.png',0) rows,cols=img.shape #第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子 M=cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6) #第三个参数为图像的尺寸中心 dst=cv2.warpAffine(img,M,(2*cols,2*rows)) cv2.imshow('img',dst) cv2.waitKey(0) cv2.destoryALLWindows()
0x09。画像の特定の領域を操作する必要がある場合があり、ROI は Numpy インデックスを使用して取得されます。 import cv2
import matplotlib.pyplot as plt
import numpy as np
img=cv2.imread('test.png')
rows,cols,ch=img.shape
pts1=np.float32([[50,50],[200,50],[50,200]])
pts2=np.float32([[10,100],[200,50],[100,250]])
M=cv2.getAffineTransform(pts1,pts2)
dst=cv2.warpAffine(img,M,(cols,rows))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
場合によっては、3 つの BGR チャネルを個別に操作する必要があります。現時点では、BGR を 1 つのチャネルに分割する必要があります。同時に、独立したチャネル イメージを BGR イメージにマージする必要がある場合があります。 OpenCVライブラリ関数のバージョンを使用
import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread('test.png') rows,cols,ch=img.shape pts1=np.float32([[56,65],[368,52],[28,387],[389,390]]) pts2=np.float32([[0,0],[300,0],[0,300],[300,300]]) M=cv2.getPerspectiveTransform(pts1,pts2) dst=cv2.warpPerspective(img,M,(300,300)) plt.subplot(121),plt.imshow(img),plt.title('Input') plt.subplot(122),plt.imshow(dst),plt.title('Output') plt.show()
import cv2 import numpy as np import matplotlib.pyplot as plt image=cv2.imread('pitt1.jpg') rows,cols,ch=image.shape #直接获取 b=img[:,:,0]
以上がPython-OpenCV_pythonの基本的な操作方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。