OpenCV 中的水平直方图

4

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

谢谢,Truong

4个回答

7

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

谢谢Carnieri,我也是用cvGetReal2D这种方式做的。再次感谢。 - user522659

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

致敬。


0

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

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) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接