ホワイト入門コンピュータビジョン(A):10分の取得OpenCVの


最近、突然、コンピュータビジョンに興味を持って、そして、我々は独自の方法を学ぶためのletのポイントちょっと、学ぶことは非常に困難興味深いものではありません!
コンピュータビジョン、それは何ですか?一言で言えば、コンピュータの所有者が見ることができるようにすることです人々が知ることができ、人々の能力は、あなたがコンピュータビジョン、すなわちコンピュータビジョンを持って言うことができる、と考えることができます。簡単なポイントのほかに、コンピュータは、いくつかの判断を行うために、画像や動画、その後、必要な情報を得ることが可能なアルゴリズムとして、人間の脳のように扱われ、写真やビデオを認識するようにすることです。

コンピュータビジョンアプリケーション

今に関する学習したため、5つの主要なコンピュータアプリケーションがある:
イメージの分類:画像分類アーキテクチャ-畳み込みニューラルネットワーク(CNN)
ターゲット検出:R-CNNの
トラッキング:平均シフトアルゴリズムそのmeanshift
セマンティックセグメンテーション:FCNの
インスタンス分割:マスクR-CNN

理解OpenCVの

コンピュータビジョンを挙げることができる私たちが考えることができる初めてのライブラリOpenCVのコードOpenCVのあるC ++で書かれている、最も古典からの画像アルゴリズムDL事前研修モデルの非常に最前線に、より多くの古典的な画像処理ライブラリであることはCVを含みます多くの方法、画像処理の多くの大規模なライブラリーは、OpenCVのライブラリーに基づいて開発されています。しかし、OpenCVのはPyTorch上に構築された新しいオープンソースのコンピュータビジョンライブラリ微分Korniaの出現ので、微分不可能である致命的な欠陥を持っています。このオープンソースプロジェクトについてのビューの小さなパートナーgithubのポイントに行くことができます興味があるhttps://github.com/arraiyopensource/kornia
基礎となるオペレーティング・OpenCVの画像処理ライブラリバーのいくつかを私たちに簡単にルック

画像の読み込み

OpenCVのライブラリには、私はライン上だけでコールCV2モジュール、パイソンを使用記事、あなたはそれを呼び出すためにあなたの良い言語を使用することができ、クロスプラットフォームのライブラリである
、その上に、コマンドライン、パイソンOpenCVのモジュールのインストールは非常に簡単です

pip install opencv-python

中国を持つことはできませんCV2モジュールのパスを使用して画像を読み込むために注意を払う必要があります、または読み込まれません
ここに画像を挿入説明
。この絵を見ては、CV2を読んだ後、結果を

import cv2
img= cv2.imread("data.jpg")
print(img)
#output
[[[238 239 243]
  [239 240 244]
  [240 241 245]
  ...
  [247 247 247]
  [247 247 247]
  [247 247 247]]
    ...
  [238 224 206]
  [238 224 206]
  [241 228 212]]]

我々は、すべての画像はピクセルで構成されていることを知って、各画素はRGB三色値を作る持っているので、画像は上記3次元配列と同様のリターンである読み取ります。
ここで私は今、再び関数imread()関数を説明します、これは関数プロトタイプであります

imread(filename,flags)

後でマークを読み取られるパラメーターフラグ、画像読取モード、デフォルト値IMREAD_COLORを選択するために、画像を読み取るは、意識チャネル3 BGRカラー画像でなければなりません。ここでは、オンラインOpenCVのは知っている私たちからの統計ですべてを見て選択する方法多くのモデルにように私を導入することなくなっていますフォーマットについて何色の絵、設定されたフラグ値の読み取り。

白髪の写真

画像は各画像の3次元データのボリュームなので、処理のためにそう頻繁に階調変換、素晴らしい、便利な取り扱いとなります。R = G = Bの階調値の値が呼び出され、前記R = G = B、色が色階調を意味し、グレースケール画像が得られた場合は、RGBモデルでは、すなわち、階調は何ですか各画素点のみが1バイトであるだけでなく、収納スペースを節約さらに取り扱いを容易にします。

import cv2
img= cv2.imread("1.jpg")
print(img)
img_gray = cv2.cvtColor(img, code=cv2.COLOR_BGR2GRAY)
print(img_gray) 
cv2.imshow('gray', img_gray)
# 等待键盘输入时中断,单位是毫秒,如果是0,无限等待,不然程序执行到show时,会发生肉眼看不见图片的现象
cv2.waitKey(0)
#output
[[240 241 242 ... 247 247 247]
 [240 241 242 ... 247 247 247]
 [240 241 242 ... 247 247 247]
 ...
 [204 204 204 ... 225 220 219]
 [204 204 204 ... 222 218 219]
 [200 200 200 ... 220 220 225]]

ここに画像を挿入説明
我々は、グレー画像の画素に見ることができる2つの次元になります

顔認識

顔認識は、情報に基づいて人の顔の特徴の生体認証技術で、現在のコンピュータビジョン研究の非常に人気のある分野です。顔認識は、インターネットhaarcascade_frontalface_alt.xmlにこのデータセットを言っ比較的高い精度、我々はそれをテストするために既にインストールCV2訓練されたデータセットのモジュールを使用する必要があり、トレーニングデータの多くを必要とし、使いやすさのために、私たちに直接このデータセットに同じディレクトリにプロジェクトにコピー

ここでは、唯一の正の顔を検出することができ、顔検出モジュールに、注意しなければならない、と画像は、つまり、写真の人々が彼の頭を傾けることができない、それ以外の場合は検出できない正でなければならず、そのような製品は、その上の画像が検出されないこと顔に

完全なコードを見てください

import cv2

img = cv2.imread('data.jpg')
# 人脸数据,级联分类器,给人脸特征数据,返回可以识别人脸的对象
detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
# 转换成灰度
gray = cv2.cvtColor(img, code=cv2.COLOR_BGR2GRAY)
# 使用训练好的识别人脸对象来识别人脸区域
# 后两个参数就是默认值,可以修改来调整识别人脸的精确度
face_zone = detector.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3) 

for x, y, w, h in face_zone:
    # 在人脸上画一个正方形,画正方形只需要知道左上角和右下角坐标即可
    cv2.rectangle(img, pt1=(x, y), pt2=(x+w, y+h), color=[0, 255, 0], thickness=2)

# 使用灰度图检测,绘制在彩色图片上
cv2.imshow('img', img)
cv2.waitKey(0)

ここでは主にあなたにdetectMultiScale()関数を説明し、次のように、関数のプロトタイプは次のとおりです。

    def detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None)

画像:これは一般的にグラデーション後の画像に変換され、

scaleFactorを:一般的に1.1〜1.5の値が優れているセット補償パラメータ、前方の変化に我々はすべての一見効果

minNeighbors:周りのオブジェクトの現在の数が定義され

minSize:設定ウィンドウのサイズ

フラグ:少し抽象的には、デフォルトや図形を選択することができ
た結果で騒ぎの所与のみんなを見て

ここに画像を挿入説明
ここに画像を挿入説明
私たちは、人々の絵の効果を確認してみましょう

ここに画像を挿入説明
ここに画像を挿入説明
すべての後に、ではない、独自のトレーニングデータセット、結果はほぼ平均だったので、ハハ!詳細を気にしないでください
、我々はヒトおよび動物にしようとするでしょうが区別できない
ここに画像を挿入説明
ここに画像を挿入説明
ハッハッハ、または人間の顔や動物の顔を区別することができます!

ビデオ処理

画像はピクセルで構成されているようなビデオ元々 、写真の数で構成され、両者は同じ理由ですが、映像が参加し、オーディオがある私にはないので、ここでは、どのように映像音声処理の話ああなります!
バーコード全体を見てください

import cv2

# 读取本地视频
cap = cv2.VideoCapture("data.mp4")

w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + 1  # 宽一点没问题,小了不行
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + 1
vidioWriter = cv2.VideoWriter('data2.mp4', cv2.VideoWriter_fourcc('M','P','4','v'), 24, (w, h))  # 要求int型

detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')

while cap.isOpened():
    flag, frame = cap.read()

    gray = cv2.cvtColor(frame, code=cv2.COLOR_BGR2GRAY)
    face_zone = detector.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=3)
    for x, y, w, h in face_zone:
        # 在人脸上画一个正方形,画正方形只需要知道左上角和右下角坐标即可
        cv2.rectangle(frame, pt1=(x, y), pt2=(x + w, y + h), color=[0, 255, 0], thickness=2)
        #  上面创建了写视频对象,仅需把每一帧写入即可
        vidioWriter.write(frame)


    if flag == False:
        # 判断是否还能读取到帧,取不到则表示视频结束了,退出循环
        break

    cv2.imshow('frame', frame)

    cv2.waitKey(20)

VideoWriter()関数は
、ビデオファイルまたはビデオカメラを開くには、次のように必要VideoWriterクラスOpenCVのは、一般的に構成され、ローカルディスクに格納されたビデオまたはビデオカメラのVideoCapture OpenCVのクラスを必要とします

VideoWriter(filename, fourcc, fps,frameSize, isColor=true);

ファイル名:ビデオはローカルのファイル名に保存され
FOURCC:エンコーダの種類で表し、一般的に使用されるには、次のとおりです。

CV_FOURCC('P','I','M','1') = MPEG-1 codec
CV_FOURCC('M','J','P','G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec

前記CV_FOURCC(「M」、「P 」、「4」、「2」)は、最小のフットプリントで、このようにしている
FPS:通常20~30用いたフレームレート、
フレームサイズを各画像のサイズ、方法タプルにパラメータ渡し(W、H)
を読む()関数の
フラグ、フレーム= cap.read()

、フラグを受信したフレームの値をフラグと戻り現フレームにリードフレーム、データフレームかどうかを示すブール値であり
、二つの機能上、次いで、ビデオ顔認識等を理解することが認識ごとに取得されます額縁とマークボックスを描画するために、次に使用する顔検出は、その後、20msの各フレームに私との間の待ち時間があるので、一緒にビデオがある、私たちの出力を見てみましょう

ここに画像を挿入説明
カザフスタンは、まだ少しの誤差、ビデオ処理は、実際に処理するための画像に分割され、この記事です。
私は共有への皆のために再び学んだバック画像や映像処理アルゴリズムと原則については、また表情で交換してもよいパートナーシップにはほとんど関心があります

公開された21元の記事 ウォン称賛28 ビュー3707

おすすめ

転載: blog.csdn.net/LPJCSY/article/details/104916028