OpenCV中的水平直方图

时间:2010-11-28 02:30:19

标签: opencv

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

张庭

4 个答案:

答案 0 :(得分:6)

The most efficient这样做的方法是使用cvReduce函数。有一个参数可以选择是否需要水平投影或垂直投影。

You can also do it by hand功能cvGetColcvGetRowcvSum相结合。

答案 1 :(得分: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

答案 2 :(得分: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

问候。

答案 3 :(得分:0)

在Python中使用cv2.reduce和OpenCV 3的示例:

import numpy as np
import cv2

img = cv2.imread("test_1.png") 

x_sum = cv2.reduce(img, 0, cv2.REDUCE_SUM, dtype=cv2.CV_32S) 
y_sum = cv2.reduce(img, 1, cv2.REDUCE_SUM, dtype=cv2.CV_32S)