Ich versuchte, horizontale Projektion mit countNonZero() -Funktion wie folgt zu bekommen.countNonZero Funktion gibt einen Assertion Fehler 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);
}
In der Zeile der callonZero() - Funktion ist jedoch ein Fehler aufgetreten. Der Fehler ist wie folgt.
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
Kann jemand bitte den Fehler aufzeigen?
binaryImage ist eine Kopie von src, die ein 3-Kanal-Farbbild darstellt. versuch cvtColor (src, binaryImage, CV_BGR2GRAY); – Micka
gibt es einen weiteren Fehler: switch horizontal.at (0, i) zu horizontal.at (0, i) seit Sie 8-Bit-Datentyp erstellt haben. –
Micka
Ich habe die Änderungen und Fehler behoben. Dank dafür. Aber jetzt sehe ich, dass der von countNonZero (roi) zurückgegebene Wert immer Null ist. Ich habe auch bestätigt, dass binaryImage kein vollständig schwarzes Bild ist. (es hat überall schwarze und weiße Pixel) –