Вот мой код Это довольно просто.
Mat image = imread("filename.png");
imshow("image", image);
waitKey();
//Image looks great.
Mat image_gray;
image.convertTo(image_gray, CV_RGB2GRAY);
imshow("image", image_gray);
waitKey();
Но когда я звоню image.convertTo(image_gray, CV_RGB2GRAY);
строка, я получаю следующее сообщение об ошибке:
OpenCV Error: Assertion failed (func != 0) in unknown function, file ..\..\..\sr
c\opencv\modules\core\src\convert.cpp, line 1020
Использование OpenCV 2.4.3
Метод convertTo
не делает преобразование цветов.
Если вы хотите конвертировать из BGR в GREY, вы можете использовать функцию cvtColor:
Mat image_gray;
cvtColor(image, image_gray, CV_BGR2GRAY);
Функция cv::Mat::convertTo
не для преобразования цветов. Это для преобразования типов. Целевое изображение должно иметь тот же размер и количество каналов, что и исходное изображение.
Для преобразования из RGB в серый используйте функцию cv::cvtColor
.
cv::cvtColor(image,image_gray,CV_RGB2GRAY);
Если вам нужно получить видео (например, с веб-камеры) в оттенках серого, вы также можете установить насыщенность видеопотока на ноль. (Например, в синтаксисе Python)
capture = cv.CaptureFromCAM(camera_index)
...
cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_SATURATION,0)
image.convertTo (image_gray, CV_RGB2GRAY);
Это неправильно. Правильно,
Mat gray_image;
cvtColor(image, gray_image, CV_BGR2GRAY);
Попробуй это.