2010-11-28 17 views
3

私はOpenCVの初心者です。今は画像処理に関連したシニアプロジェクトを作っています。 OpenCVのいくつかの機能で水平または垂直のヒストグラムを作成できますか? おかげで、あなたがコメントで提供されたリンクに基づいてOpenCVの水平ヒストグラム

チュオン

答えて

1

が、これは私はあなたがしようとしていると考えているものです。

n個の要素を持つ配列を作成するとします.nは入力画像の列数です。配列のn番目の要素の値は、n番目の列のすべてのピクセルの合計です。

この配列を計算するには、入力イメージの列をループし、cvGetSubRectを使用してその列のピクセルにアクセスし、cvSumを使用してピクセルを合計します。これを行うための

import cv 

def verticalProjection(img): 
    "Return a list containing the sum of the pixels in each column" 
    (w,h) = cv.GetSize(img) 
    sumCols = [] 
    for j in range(w): 
     col = cv.GetSubRect(img, (j,0,1,h)) 
     sumCols.append(cv.Sum(col)[0]) 
    return sumCols 
+0

ありがとうCarnieri、私は同じように、cvGetReal2Dを使用しました。再度、感謝します。 – user522659

5

The most efficient方法は、cvReduce関数を使用することによるものである:ここ

は、グレースケール画像を仮定することがないいくつかのPythonコードです。水平投影または垂直投影を選択するためのパラメータがあります。

You can also do it by handcvGetColおよびcvGetRowcvSumを組み合わせたものです。 carnieri答えを更新

1

(一部の品種の機能は、今日働いていない)

import numpy as np 
import cv2 

def verticalProjection(img): 
    "Return a list containing the sum of the pixels in each column" 
    (h, w) = img.shape[:2] 
    sumCols = [] 
    for j in range(w): 
     col = img[0:h, j:j+1] # y1:y2, x1:x2 
     sumCols.append(np.sum(col)) 
    return sumCols 

よろしく。