Горизонтальная гистограмма в OpenCV - PullRequest
4 голосов
/ 28 ноября 2010

Я новичок в OpenCV, сейчас я занимаюсь старшим проектом, связанным с обработкой изображений.У меня есть вопрос: могу ли я сделать горизонтальную или вертикальную гистограмму с некоторыми функциями OpenCV?Спасибо,

Труонг

Ответы [ 4 ]

6 голосов
/ 17 декабря 2012

Наиболее эффективный способ сделать это - использовать функцию cvReduce . Есть параметр, который можно выбрать, если вы хотите горизонтальную или вертикальную проекцию.

Вы также можете сделать это вручную с функциями cvGetCol и cvGetRow в сочетании с cvSum .

1 голос
/ 13 февраля 2017

Обновление ответа 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

Привет.

1 голос
/ 09 декабря 2010

Основываясь на ссылке, которую вы указали в комментарии, я думаю, что вы пытаетесь это сделать.

Вы хотите создать массив из 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 голосов
/ 01 мая 2018

Пример использования cv2.reduce с OpenCV 3 в Python:

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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...