Я попытался получить горизонтальную проекцию, используя функцию countNonZero(), как показано ниже.Функция countNonZero дает ошибку утверждения в openCV
Mat src = imread(INPUT_FILE, CV_LOAD_IMAGE_COLOR);
Mat binaryImage = src.clone();
cvtColor(src, src, CV_BGR2GRAY);
Mat horizontal = Mat::zeros(1,binaryImage.cols, CV_8UC1);
for (int i = 0; i<binaryImage.cols; i++)
{
Mat roi = binaryImage(Rect(0, 0, 1, binaryImage.rows));
horizontal.at<int>(0,i) = countNonZero(roi);
cout << "Col no:" << i << " >>" << horizontal.at<int>(0, i);
}
Но ошибка произошла в строке вызова функции countonZero(). Ошибка заключается в следующем.
OpenCV Error: Assertion failed (src.channels() == 1 && func != 0) in cv::countNo
nZero, file C:\builds\2_4_PackSlave-win32-vc12-shared\opencv\modules\core\src\st
at.cpp, line 549
Может кто-нибудь указать на ошибку?
binaryImage - это копия src, которая представляет собой трехканальное цветное изображение. попробуйте cvtColor (src, binaryImage, CV_BGR2GRAY); – Micka
есть еще одна ошибка: switch horizontal.at (0, i) to horizontal.at (0, i), так как вы создали 8-битный тип данных. –
Micka
Я сделал изменения и ошибки решены. Спасибо за это. Но теперь я вижу, что значение, возвращаемое функцией countNonZero (roi), всегда равно нулю. Я также подтвердил, что binaryImage не является полностью черным изображением. (он имеет как черные, так и белые пиксели везде) –