2010-11-28 58 views
3

我是OpenCV的新手,现在我正在做一个高级项目相关的图像处理。我有一个问题:我可以使用OpenCV的某些功能制作水平或垂直直方图吗? 谢谢,OpenCV中的水平直方图

张庭

回答

1

根据您在评论中提供的链接,这就是我相信你正在试图做的。

您想创建一个具有n个元素的数组,其中n是输入图像中的列数。数组的第n个元素的值是第n列中所有像素的总和。

您可以通过循环遍历输入图像的列来计算此数组,使用cvGetSubRect访问该列中的像素,并使用cvSum来对这些像素进行求和。

下面是一些Python代码,不会说,假设一个灰度图像:

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 2010-12-13 16:40:41

1

更新carnieri答案(CV一些功能不工作今天)

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 

问候。