C ++ и OpenCV: проблема преобразования изображения в оттенки серого

Вот мой код Это довольно просто.

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

3

Решение

Метод convertTo не делает преобразование цветов.

Если вы хотите конвертировать из BGR в GREY, вы можете использовать функцию cvtColor:

Mat image_gray;
cvtColor(image, image_gray, CV_BGR2GRAY);
5

Другие решения

Функция cv::Mat::convertTo не для преобразования цветов. Это для преобразования типов. Целевое изображение должно иметь тот же размер и количество каналов, что и исходное изображение.

Для преобразования из RGB в серый используйте функцию cv::cvtColor.

cv::cvtColor(image,image_gray,CV_RGB2GRAY);
0

Если вам нужно получить видео (например, с веб-камеры) в оттенках серого, вы также можете установить насыщенность видеопотока на ноль. (Например, в синтаксисе Python)

 capture = cv.CaptureFromCAM(camera_index)

...
cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_SATURATION,0)

0

image.convertTo (image_gray, CV_RGB2GRAY);
Это неправильно. Правильно,

 Mat gray_image;
cvtColor(image, gray_image, CV_BGR2GRAY);

Попробуй это.

0
По вопросам рекламы [email protected]