OpenCv-Python の基本


1. OpenCvとは何ですか?

opencv は、画像やコンピュータ ビジョンの問題を迅速に処理するためのツールであり、C++、Python、Java などの複数の開発言語をサポートしています。このチュートリアルのすべての例は opencv-python に基づいており、Python 言語を使用してデジタル画像を処理および調査します。

2. 画像の読み込み・表示・保存

1.imread 画像を読む

img = cv2.imread() 							# 读入的图像会被转化为ndarray,未读取到图像,返回None
filename:图像路径
flags:标志以什么形式读入图像,可以选择一下方式:
· cv2.IMREAD_COLOR: 默认模式,图像调整为BGR,任何图像的透明度都将被忽略     可以输入数字 1 代替
· cv2.IMREAD_GRAYSCALE:以灰度模式加载图像							  可以输入数字 0 代替
· cv2.IMREAD_UNCHANGED:保留读取图片原有的颜色通道 					  可以输入数字 -1 代替

2. imshow 表示


imshow 関数の役割は、ウィンドウを作成し、ウィンドウ内に画像を表示することです。ウィンドウは画像のサイズに自動的に適合します。画像を表示するウィンドウのサイズは、imutils モジュールを通じて調整できます。

cv2.imshow(winname,mat)
winname: 窗口名称(字符串)
mat: 图像对象,类型是numpy中的ndarray
------
# 我们一般就传入两个参数,一个需要修改大小的图像,一个weight或height,图像的新尺寸和原尺寸长宽比不变 
imutils.resize(image,width=None,height=None) 					

3. インライトセーブ

cv2.imwrite(filename, image)
filename: 保存的图像名称(字符串)
image: 图像对象,类型是numpy中的ndarray类型

4.waitKey() & destroyAllWindows()

waitkey は imshow の継続時間を制御します。imshow の後に waitkey が続かない場合、imshow に画像を表示する時間が提供されないのと同じです。waitKey 関数は
キーボード イベントを待つ関数です。パラメータ値が late<=0 の場合、待機時間は無限に長く、遅延は正の値 整数 n の場合、waitKey の終了まで少なくとも n ミリ秒待機します
待機時間中にいずれかのキーが押されると関数は終了し、そのキー値 (ASCII コード)キーが返される 待機時間が経過してもキーが押されなかった場合は、-1 が返される ord() 関数が使用可能
文字の ADCII コードを取得するには、待機中に文字 A キーが押されたかどうかを判断するperiod を指定し、waitKey ==ord("a") の戻り値を使用します。

ウィンドウを破棄するときは、
(1) ウィンドウをしばらく放置してから自動的に破棄する
(2) 指定されたキーボード入力などの指定されたコマンドを受け取ってウィンドウを終了する の2 つの方法を考えてください。

retval=cv2.waitKey(delay=None)  				# delay表示等待键盘触发的时间,单位是ms,默认为0
- delay > 0 :	等待delay毫秒时仍未接收到键盘输入,图像将自动销毁
- delay <= 0 : 无限等待,接收到任意键盘输入便会进行窗口销毁

imshow 関数を使って画像を表示する場合、最後にプログラム内で画像表示ウィンドウを破棄しないとプログラムが正常に終了しません。ウィンドウを破棄する関数としてよく使われるのは以下の 2 つです。

- cv2.destroyWindow(winname) 			# 销毁单个特定窗口 winname:将要销毁的窗口的名字

- cv2.destroyAllWindows() 				# 销毁全部窗口,无参数

3. 簡単な描画

パブリックパラメータ:
img: 描画する必要がある画像オブジェクト ndarray を示します。
Color: BGR を使用して、描画された幾何学的図形の色を示します。 height: 描画された幾何
学図形の線の太さを示します。閉じた画像の場合、デフォルトは 1 です。円や楕円など、take-1はグラフの内側を塗りつぶします
lineType: 幾何学的なグラフの線の種類を示します デフォルトの8連結線は滑らかです cv2.LINE_AAを使用すると、線はより滑らかになります

  1. 直線
    cv2.line(img, pt1, pt2, color, height=None, lineType=None,shift=None)
    pt1, pt2 はそれぞれ線の始点と終点のピクセル座標を表します
  2. Rectangle
    cv2.rectangle(img, pt1, pt2, color,thickness=None, lineType=None,shift=None)
    pt1、pt2 はそれぞれ長方形の左上隅と右下隅の座標を表します。
  3. Circle
    cv2.circle(img,center,radius,color,thickness=None,lineType=None,shift=None)
    center と radius は、それぞれ円の中心と円の半径の座標を表します。
  4. テキストを追加します
    cv2.putText(img,text,org,fontFace,fontScale,color,thickness=None,lineType=None)
    text は描画されるテキストの内容です
    org は描画されるフォントの位置、テキストの左下隅です開始点の
    fontFace フォント タイプ、例 cv2.FONT_HERSHEY_SIMPLEX
    fontScale フォント サイズ

  1. マウス操作応答関数を作成し、関数def OnMouseAction(event,x,y,flags,param)
    に実装する操作を記述します。 OnMouseAction は応答関数の名前です。どのイベントがトリガーされたかを示すようにイベントをカスタマイズできます。 cv2 など EVENT_LBUTTONDOWN 左ボタンを押すx,y はマウスイベント発生時のウィンドウ内のマウスの座標 (x,y) を示すflags はマウスのドラッグイベントを示す応答関数を関数として定義した後ID 、関数を特定のウィンドウにバインドし、ウィンドウ内のマウスがイベントをトリガーすると、応答関数を見つけて実行できます。関数 cv2.setMouseCallback(winname,onMouse) を使用してウィンドウと応答関数をバインドします。winname はウィンドウ名、onMouse は応答関数名です。









# 示例:单击鼠标左键,输出鼠标的坐标信息
def OnMouseAction(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        print(x, y)
img = cv2.imread("lena.jpg")
cv2.namedWindow("x")
cv2.setMouseCallback("x", OnMouseAction)
cv2.imshow("x", img)
cv2.waitKey()
cv2.destroyAllWindows()
  1. スクロールバー
    cv2.createTrackbar(trackbarname,winname,value,count,onChange)
    trackbarname スクロールバー名
    winname ウィンドウ名
    value 初期値、スライダー位置
    カウント スクロールバーの最大値、通常、最小値は 0
    onChange コールバック関数、スクロールバーを次の操作に設定します。テーブルはこの関数で記述されています
    関数 retval = cv2.getTrackbarPos(trackbarname,winname) を通じてスクロール バーの戻り値を取得します

4. 画像処理の基礎

  1. OpenCvを使用してカラー画像を読み込むと、画像のB、G、Rチャネルのピクセル値が順番に読み込まれ、画像配列内の値に次の形式でアクセスできます。インデックス、たとえば、image[0,0,0] は、画像の 0 行目、0 列目、0 番目のチャネル (B チャネル) ピクセルの最初の画像にアクセスします。
  2. チャネル操作インデックスによる
    チャネル分割
    b=img[:,:,0] g =img[:,:,1] r=img[:,:,2] b,g,r=cv2.split( img )
    チャネル
    マージ
    cv2.merge([b,g,r])
  3. 画像属性を取得
    img.shape行、列、チャネル -> H、W、C
    img.dtypeデータ型
    img.size総ピクセル数

五、色空間

  1. GRAY (グレースケール画像) 色空間は
    通常、256 グレー レベルの 8 ビット グレースケール画像を指し、ピクセル値の範囲は [0,255] です。
  • RGB->GRAY
    グレー=0.299 R+0.587 G+0.114*B
  • グレー ->RGB
    R=グレー、G=グレー、B=グレー
  1. HSV 色空間
    色相、光の色、値の範囲 [0,360]
    彩度、色深度、範囲 [0,1]
    値の明るさ、光の明るさ、範囲 [0,1]
  2. 型変換関数
    dst = cv2.cvtColor(src,code,dst=None,dstCn=None)
    dst は入力イメージと同じデータ型と深度を持つ出力イメージを表します。src は
    入力イメージ、uint8,uint16 を表します,float32
    コードは色空間を表します。変換コード
    dstCn は対象画像のチャンネル数です。

6. 幾何学的変換

  1. スケーリング
    dst = cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)
    dst 出力対象画像、画像サイズは dsize (値が 0 以外の場合)
    src オリジナル画像
    dsize 出力画像サイズ
    fx 水平ズーム率
    fy 垂直ズーム率
    interpolation 補間方式、デフォルトは cv2.INTER_LINEART、バイリニア補間
    対象画像のサイズ dst は dsize または fx\fy のいずれかで指定
  • dsize の値を指定すると、fx\fy の値を指定するかどうかに関係なく、dst のサイズは dsize dsize
    (w,h) によって決まります。w と h はズームされたターゲット画像の幅と高さに対応します。 wはfx関連、hはfy関連
    dsizeを指定した場合、x方向のスケーリングサイズは fx=double(dsize.w / src.w)
    同様に、y方向のスケーリングサイズは fy= double(dsize.h / src.h)
  • パラメータ fx と fy で指定します
    パラメータ dsize の値が None の場合、このときの対象画像のサイズは
    w=round(fx src.w), h=round(fy src.h)となります。
  1. Flip
    dst = cv2.flip(src, flickCode)
    dst は、元の画像と同じサイズおよびデータ型のターゲット画像を表します。
    src 元の画像
    flickCode 回転タイプ

    フリップコード 効果
    0 X 軸を中心に反転する
    正の数 y 軸を中心に反転 (最も一般的に使用されます)
    負の数 x、yを同時に反転します
  2. アフィン
    アフィン変換とは、一連の幾何学的変換を通じて画像を平行移動および回転できることを意味します。
    dst = cv2.warpAffine(src,M,dsize,dst=None,flags=None)
    dst ターゲット画像
    src 元の画像
    M 変換行列、2 行3 列
    dsize 出力画像サイズ、順序は (w, h)、最初の行、次の列
    dst (x, y) = src (M11 x+M12 y+M13, M21 x+M22 y+M23)

  • 平行移動 M=np.float32([[1,0,detx],[0,1,dety]])、detx と dety は x 方向と y 方向の平行移動距離です
  • 回転は、関数 retval = cv2.getRotationMatrix2D(center, angle,scale) を通じて変換行列 M を取得します。中心
    は回転の中心点、(x, y)
    angle は回転角度、正の数は反時計回りを意味します。負の数は時計回りを意味します。scale
    はサイズを拡大縮小するための変換スケールです。

7. ビデオ処理

動画はフレームと呼ばれる一連の画像で構成されています。フレームを再生する速度はフレーム レートと呼ばれ、単位はフレーム/秒、対応する英語は FPS (Frames Per Second) です。

  • ビデオキャプチャクラス
  1. 初期化
    Capture object = cv2.VideoCapture("カメラ ID 番号")
    カメラ ID 番号はデフォルトで -1 です。これは、カメラがランダムに選択されることを意味します。複数のカメラがある場合は、数値 0、1、2 を使用して表しますカメラ ID 番号
    「Capture object」が戻り値で、VideoCapture クラスのインスタンス化されたオブジェクトです。
    ビデオ ファイルを初期化する場合、パラメータはファイル名です
    Capture object = cv2.VideoCapture("file name")
  2. cv2.VideoCapture.isOpend() は、初期化が成功したかどうかを確認し、成功した場合は True を返し、失敗した場合は False を返します。
  3. キャプチャ フレーム
    retval、image = cv2.VideoCapture.read()
    retval はキャプチャ フレームが成功したかどうかを示し、True/False
    画像は返されたフレームを示し、フレームがない場合は None を返します。
  4. cv2.VideoCapture.release() カメラを閉じる
  5. プロパティ設定
    retval = cv2.VideoCapture.get(propld) VideoCapture クラス オブジェクトのプロパティ
    propld 値を取得
    cv2.CAP_PROP_FRAME_WIDTH
    cv2.CAP_PROP_FRAME_HEIGHT
    retval = cv2.VideoCapture.set(propld,value) VideoCapture クラス オブジェクトのプロパティを変更
  • VideoWriter クラスは、
    画像をビデオ ファイルとして保存し、ビデオ タイプの変換を完了するなど、ビデオのプロパティを変更します。
  1. 初期化
    インスタンス化オブジェクト = cv2.VideoWriter(filename, fourcc, fps, FrameSize)
    ファイル名。ファイル名が既に存在する場合、ファイル
    fourcc が上書きされます。多くの場合、cv2.VideoWriter_fourcc('X','V','I', ' D')、mp4 エンコード タイプを示します。生成されるファイル拡張子は .avi
    fps、フレーム レート
    、frameSize、各フレームの幅と高さです。
  2. write 関数
    なし = cv2.VideoWriter.write(image)
    画像は書き込まれるビデオ フレームであり、カラー画像の形式は BGR です
  3. リリース
    cv2.VideoWriter.release()
import cv2
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
forcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("xx.avi", forcc, 25, (640, 480))
while cap.isOpened():
    retval, frame = cap.read()
    if retval:
        out.write(frame)
        cv2.imshow("xx", frame)
        k = cv2.waitKey(1)
        if k == 27:
            break
    else:
        break
cap.release()
out.release()
cv2.destroyAllWindows()

要約する

ヒント: 記事の概要は次のとおりです:
例: 上記は今日お話しする内容です。この記事ではパンダの使用法を簡単に紹介するだけであり、パンダはデータを迅速に処理できるようにする多数の関数とメソッドを提供します。そして簡単に。

おすすめ

転載: blog.csdn.net/goodlmoney/article/details/126830538