Ho provato ad ottenere la proiezione orizzontale usando la funzione countNonZero() come sotto.countNonZero function dà un errore di asserzione in 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);
}
Ma si è verificato un errore nella riga della funzione chiamata countonZero(). L'errore è il seguente.
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
Qualcuno può indicare l'errore?
binaryImage è una copia di src che è un'immagine a colori a 3 canali. prova cvtColor (src, binaryImage, CV_BGR2GRAY); – Micka
c'è un altro errore: passare orizzontale.at (0, i) a horizontal.at (0, i) poiché è stato creato un tipo di dati a 8 bit. –
Micka
Ho apportato le modifiche e gli errori sono stati risolti. Grazie per quello. Ma ora vedo che il valore restituito dalla funzione countNonZero (roi) è sempre zero. Ho anche confermato che binaryImage non è un'immagine completamente nera. (ha pixel in bianco e nero ovunque) –