顔認識に基づいてOpenCVのとKerasシリーズ - 画像の基本的な操作で、OpenCVの早期接触

最近の畳み込みニューラルネットワークについての知識を統合する顔認識プログラムをやろうとして、プロジェクトコードが実装されている見ながらプロジェクトは、OpenCVの、最初の接触のOpenCVを使用するには、調査のドキュメントとチュートリアル中。多くのことを学びました、また、私はこのプロジェクトで学んだ、自分の知識を使用メモや一連のレコードを記述することを計画します。

画像の基本的な操作の一部では、このOpenCVの開始から注意。

ビルドに開発環境

お使いのコンピュータは、ラップトップで、win10、64ビットシステムでは、最初の科学技術計算やデータ処理および分析のためのPythonパッケージアナコンダと環境管理ツールをインストールし、AnacondaはSqyderに科学的なPythonのIDEについては、このデータだけでなく、グラフィックスAnancondaナビゲーターが来ますインタフェースは、簡単にインストールなど、更新パッケージOpenCVの、Tensorflow、Keras、numpyのに使用することができます。

アナコンダインストールは非常に簡単です、ちょうどwin10 64ビットのインストーラをダウンロードするには、公式Webサイトにアクセスし、アナコンダシステム環境変数、私が最初にインストールしようとしたときに追加されていない、その後の使用の問題に追加することを選択するには、インストールプロセスに注意を払うことができますそして、後で再びそれを再インストールします。

Basic環境:Pythonの3.6.3、3.4.1 OpenCVの

小ヒント:あなたがコードを書くスピードアップするためにいくつかの一般的なショートカットを見つけることができますToolsPreferenceKeyboardショートカットスパイダーIDEのメニューバー。

OpenCVのは何ですか

OpenCVのは、オープンソースのコンピュータビジョンライブラリの略で、クロスプラットフォームコンピュータビジョンライブラリです。OpenCVのは、リアルタイム画像処理、コンピュータビジョンとパターン認識プログラムを開発するために使用することができます。OpenCVのは、次の分野の問題を解決するために使用することができます。

  • 拡張現実感
  • 顔認識
  • ジェスチャー認識
  • ヒューマンコンピュータインタラクション
  • アクションの認識
  • モーショントラッキング
  • 物体認識
  • パーティションのイメージ
  • ロボット

画像の読み込み、表示、保存を実現OpenCVの

OpenCVの強力な、数多くのコンテンツではなく、息が大きな太った男を食べて、私が学習を開始する最も簡単な画像操作から行ってきました。

import cv2 # 首先引入openCV

img = cv2.imread('smile.jpeg',0) # 读取图片

cv2.imreadノートはプログラムへの作業ディレクトリで絵という、最初のパラメータは、画像の名前で、2つのパラメータを持っている画像機能を読むことですか、私たちは、ファイルへの絶対パスの全体像を与える必要があり、2番目のパラメータを指定ファッション画像が存在する、読み取る1、0、-1 3つの値は以下の意味です。

  • 1:cv2.IMREAD_COLORデフォルト値は、透明度を無視し、カラー画像を読み込みます
  • 0:cv2.IMREAD_GRAYSCALEグレースケールで読み取った画像
  • -1:cv2.IMREAD_UNCHANGEDカラー画像を読み取り、情報及び透明度
cv2.namedWindow('smile', cv2.WINDOW_NORMAL)  # 创建一个名为smile的窗口,第二个参数,cv2.WINDOW_NORMAL生成一个可以手动缩放的窗口,这个flag默认是cv2.WINDOW_AUTOSIZE,窗口会自动适应图片大小,如果图片太大可能无法完全显示,就最好用cv2.WINDOW_NORMAL。
cv2.imshow('smile',img) # 显示图片在刚创建的窗口里,,两个参数分别是要用来显示图片的窗口的名字和要显示的图片。

これは、ウィンドウを作成することで、その後、画像がこのウィンドウに表示され、直接使用することに注意してくださいimshowウィンドウを作成しますが、ウィンドウが自動的に画像のサイズに適応することができ、できない手動スケーリングので、何も再作成しないでウィンドウ表示の柔軟性があります。

次は、問題に注意を払うだけでOpenCVのを学ぶために始めて、私も最近、直接プログラムの実行を開始ここならば、あなたは絵を出ない表示ウィンドウを見つけるだろう、このノートを変更する予定につまずいたときに発生する可能性があり、応答しません。適切に画像を表示するには、以降で追加する必要がありwaitkey、次のように、ジョブの文:

k = cv2.waitKey(0) # waitKey的功能是等待一定的时间,如果等待时间内有按键操作就继续执行后面的语句,如果没有按键就在等待时间到后继续执行后面的语句。时间以ms为单位

練習は自動的に関するウィンドウが閉じ約15秒を何もせず、10秒である、10000に設定した場合waitKeyパラメータは、無期限キー待って、窓がないクローズを自動的に行いとき0で、見つかった、動作ウィンドウも15S内のボタンがあります閉じます。

追加IグーグルビットとのHighGUIは時間レンダリング処理をimshowを与えないために発生した問題のフロントがあるので、画像が表示できないた(と、ここで私も初心者のOpenCVなど知るためではない)、waitkey後に、プログラムが待機するキーについて、これを与えるimshow表示画像に時間を。OpenCVのこの問題に関する公式な説明を次のように:

OpenCVの新規参入者のための一般的な間違いは、CVと各ドロー:: waitKey(30)をフォローすることなく、ビデオフレームをループでのCV ::関数imshow()を呼び出すことです。HighGUIがCV ::関数imshowからドロー要求を処理する時間を与えれることはありませんので、この場合には、何も、画面に表示されていません()。

そして、プログラムは、キーへの応答を与えます:

if k & 0xFF == 27: # wait for ESC key to exit,注意这里的0xFF是64位系统必须的
    cv2.destroyAllWindows()  # 关闭所有窗口

あなたはESCキーを押すと、すべてのウィンドウを閉じます。

# ord函数返回字符的ASCII或则和Unicode数值,这里返回的是ASCII值
elif k & 0xFF == ord('s'): # wait for 's' key to save and exit,ord函数返回字符对应的ASCII数值或者 Unicode 数值。
    print (k)
    cv2.imwrite('smile1.jpg',img)
    cv2.destroyAllWindows()

ここでは、プレスで「S」キー移動作業ディレクトリに保存されたsmile1.jpg名の絵、そしてその後、ウィンドウを閉じます。

絵の基本的な操作

画像を読み取る際に、表示に基づいて記憶され、OpenCVのはまた、認識機能を費やすことができるいくつかの項目を選択し、画素レベルの操作の基本的な機能の画像を提供します。

  • アクセスおよび修正画素値:OpenCVのでは、実際のデータ・タイプの画像は、numpyののn次元配列であり、あなたが使用できるように、numpy.ndarrayより柔軟にサポートし、画像へのインデックス付きアクセス(Pythonのリストに対して)の画素値をエリア:
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('smile.jpeg') # 读入图片返回的是一个numpy的n维数组
print (type(img)) # <class 'numpy.ndarray'>,type函数返回对象类型
px = img[100,100] # [4 5 3]
print (px) # 4
# accessing only blue pixel
blue = img[100,100,0]
print (blue)
# modify the pixel values
img[100,100] = [255,255,255]
print (img[100,100]) # [255 255 255]
# 上面的索引方式通常用来选择多行多列组成的区域,比如在图片中单独选择出人脸区域。
# 要获取单独一个像素,用numpy.ndarray.item
# accessing the RED value
print (img.item(10,10,2)) # 3

# modifying RED value
img.itemset((10,10,2),100)
print (img.item(10,10,2)) # 100
  • 総画素数、画像データ・タイプの各次元立体画像のピクチャを含むアクセス写真、
print (img.shape) # (4192, 3104, 3)
print(img.size) # 39035904,4192*3104*3
print(img.dtype) # uint8,8位无符号整数
  • 増加画像パディングは、入力が必要な大きさの多次元アレイに到達するように、畳み込みニューラルネットワーク畳み込み多次元アレイが0の周りに、典型的には、画像(又は一般的な多次元配列)において、従来の操作を必要とします。主によってこの関数cv2.copyMakeBorder()の機能を実装します:
# making borders for images(padding)
BLUE = [255,0,0]
# top, bottom, left, right分别是各个边padding的宽度,cv2.BORDER_CONSTANT是一种border type,表示用相同的颜色填充
constant = cv2.copyMakeBorder(img, 100,100,100,100, cv2.BORDER_CONSTANT, value = BLUE)
cv2.imshow('show',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()

概要

これらは、公式のジュニアパートナーのオリジナルの英語版を参照するように、あなたのコンピュータ上で何が起こるかのより多くの機能、主な参照OpenCVの英語コースがあるでしょうあなたは異なるパラメータを試してみるために、独自の画像を使用することができ、写真の基本的な操作のOpenCVの一部です参照は、頭痛はこれにノートを参照することができ、英語を参照するには、より多くのコンテンツがあり、オリジナルの英語版にリンクを見に行くことができます。

大きなうなずきがあるだろう時にOpenCVのプロジェクトコードに新しい直接参照が、公式ドキュメントやチュートリアルで、あなたはゆっくりと始めることができます。

画像操作はビデオの操作に基づいて、次のノートにビデオ操作のOpenCVに関し、ラップトップの顔、キャプチャする用顔認識カメラの後に必要であるカメラと顔検出を使用して、ライブビデオをキャプチャするためのOpenCVを使用しレーンは、OpenCVのビデオキャプチャの基本的な操作を紹介し、リアルタイムのビデオストリーム機能でカメラから人間の顔を実現します。


著者:_fe種子
ます。https://www.imooc.com/article/51083リンク
出典:ムークラスのネットワーク
、元のMu-クラスのネットワークに掲載された記事では、ソースを明記してください、ありがとうございました

おすすめ

転載: www.cnblogs.com/hellojack/p/12144693.html