タグ

ブックマーク / python-gazo.blog.jp (5)

  • 【Python/OpenCV】グラフカットで前景抽出(背景除去)

    # -*- coding: utf-8 -*- import cv2 import numpy as np import matplotlib.pyplot as plt # bgrをrgbに並び替え def bgr2rbg(im): b,g,r = cv2.split(im) im = cv2.merge([r,g,b]) return im def main(): # グラフカットをおこなう領域(矩形)を指定 x1,y1,x2,y2 = 0,0,500,350 # 画像の取得 im = cv2.imread("test.jpg") # マスク用の画像オブジェクト生成 mask = np.zeros(im.shape[:2],np.uint8) # 背景用の画像オブジェクト生成 bgd_model = np.zeros((1,65),np.float64) # 前景用の画像オブジェクト生

    【Python/OpenCV】グラフカットで前景抽出(背景除去)
    weed_7777
    weed_7777 2015/06/29
  • 【Python/OpenCV】背景差分法による移動物体の検出

    背景画像(bg.jpg)と現在の入力画像(in.jpg)から背景差分法により動体を検出する。 処理の流れは以下の通りである。 1. 背景画像を用意 2. 背景画像と入力画像をグレースケール変換して取得 3. 背景画像と入力画像の差分画像を生成 4. 差分画像を閾値処理で二値化し動体領域を検出 5. Medianフィルタでゴマ塩ノイズを除去 6. 動体領域のエッジをCannyアルゴリズムで検出 背景画像(左) 入力画像(右) # -*- coding: utf-8 -*- import cv2 import numpy as np import pylab as plt def bg_sub(im_in,im_bg,th,blur): # 差分計算 diff = cv2.absdiff(im_in,im_bg) # 差分が閾値より小さければTrue mask = diff

    【Python/OpenCV】背景差分法による移動物体の検出
    weed_7777
    weed_7777 2015/06/29
  • 【Python/OpenCV】ハフ変換で直線と円を検出する

    トランプの画像からハフ(Hough)変換で直線検出をおこなった. OpenCVには簡単にハフ変換で直線を検出できる関数が2つ用意されている. 1つ目:cv2.HoughLines・・・標準的ハフ変換を利用して,2値画像から線分を検出する. 2つ目:cv2.HoughLinesP・・・確率的ハフ変換を利用して,2値画像から線分を検出する. 結果画像の赤色線が検出した直線である. 処理の流れは以下の通りである. 1. 入力画像を取得 2. 入力画像をグレースケール変換 3. グレースケール画像を2値化 4. Cannyアルゴリズムで2値化画像のエッジを検出 5. Hough変換によりエッジ画像から直線を検出 6. 入力画像,出力画像,2値化画像,エッジ画像をそれぞれ描画 # -*- coding: utf-8 -*- import cv2 import numpy as

    【Python/OpenCV】ハフ変換で直線と円を検出する
  • 【Python/OpenCV】単眼カメラで簡易距離計測1

    単眼カメラを用いた簡易的な距離計測の手法を紹介します。 一般的に単眼カメラの方法(カメラ1台)はステレオ法(カメラ2台)と比べると「計算コスト」「金銭コスト」「設置場所の制約コスト」の面で優れています。ただし、精度の面では劣ります。 今回は、「物体がカメラに近づけば画像上に大きく映り」「遠ざかれば小さく映る」ことを利用し、物体までの距離を測定します。 $L_1$を基準距離,$L_2$を測定したい対象物体までの奥行き距離とします。 また、対象物体が$L1, L2$の位置にあるときの画像上の長さをそれぞれ$h_1, h_2$、面積を$S_1, S_2$とします。 このとき、画像上の長さに着目すると、事前に$L_1$と$h_1$を求めれば距離$L_2$はつぎの式で計算できます。 \begin{eqnarray} L_2=L_1\frac{h_1}{h_2} \label{eq:1} \end{

    【Python/OpenCV】単眼カメラで簡易距離計測1
  • 【Python/OpenCV】MeanShift法で物体追跡をしてみた

    # -*- coding: utf-8 -*- import cv2 import numpy as np def main(): # カメラのキャプチャー cap = cv2.VideoCapture(0) # 最初のフレームを取得 ret,frame = cap.read() # 追跡したい領域の初期設定 r,h,c,w = 250,90,400,125 track_window = (c,r,w,h) # 追跡のためのROIを設定 roi = frame[r:r+h, c:c+w] # HSV色空間に変換 hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV) # マスク画像の作成 mask = cv2.inRange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.))) #

    【Python/OpenCV】MeanShift法で物体追跡をしてみた
  • 1