2016-04-20 3 views
1

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

Этот код

Mat thrs; 
threshold(roi, thrs, 252, 255, THRESH_BINARY); 
Mat dy; 
reduce(thrs, dy, 1, CV_REDUCE_SUM); 

дает мне ошибку времени выполнения о том,

OpenCV Error: Unsupported format or combination of formats 

Я предполагаю, что это связано с бинарного изображения, находящегося в формате CV_8UC1, поэтому ду в том же формате и не может содержать суммарные значения. Это верно? Что вокруг?

ответ

2

Если не указать последний параметр dtype и матрица назначения не инициализируется cv::reduce будем считать, что dtype равно типа исходной матрицы. В вашем случае это будет CV_8UC1. Поскольку этот формат не может хранить суммарные значения, вы получили ошибку времени выполнения.

Чтобы избежать этой ошибки, вам необходимо указать параметр dtype. Например:

reduce(thrs, dy, 1, CV_REDUCE_SUM, CV_32SC1); 
1

Функция уменьшения поддерживает только 32S32F и 64F как выход. Это не относится к документации функции reduce ... но это похоже на то ... по умолчанию она будет пытаться использовать тот же тип, что и вход. Таким образом, вы можете попробовать сделать что-то вроде этого:

cv::reduce(thrs, dy, 1, CV_REDUCE_SUM, CV_32S); 

просто напоминание:

32S is int 
32F is float 
64F is float