Próbowałem uzyskać rzut poziomy za pomocą funkcji countNonZero(), jak poniżej.Funkcja countNonZero daje błąd potwierdzenia w 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);
}
Ale wystąpił błąd w linii wywołującej funkcję countonZero(). Błąd jest następujący.
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
Czy ktoś może wskazać błąd?
binaryImage to kopia src, która jest 3-kanałowym kolorowym obrazem. spróbuj cvtColor (src, binaryImage, CV_BGR2GRAY); – Micka
jest inny błąd: przełącz poziomo.at (0, i) na horizontal.at (0, i), ponieważ utworzono 8-bitowy typ danych. –
Micka
Zrobiłem zmiany i błędy zostały rozwiązane. Dziękuję za to. Ale teraz widzę, że wartość zwracana przez funkcję countNonZero (roi) zawsze wynosi zero. Potwierdziłem również, że binaryImage nie jest całkowicie czarnym obrazem. (ma wszędzie białe i czarne piksele) –