У меня есть cv :: Mat, созданный из изображения RGB с 8 битами на компонент, 4 каналами (CV_8UC4). Я хочу преобразовать его в серый стиль Mat, а затем сохранить обратно мой Graystyle Mat в 4-канальный Mat. Как я могу это сделать? Следующий код приводит меня к EXC_BAD_ACCESS:
void myMethod(const Mat& mat) {
cv::Mat gray;
cv::cvtColor(mat, gray, CV_RGB2GRAY);
gray.copyTo(mat);
}
Вы не можете использовать константную ссылку, если хотите изменить данные:
void toGrayscale(cv::Mat& mat)
{
cv::Mat gray;
cv::cvtColor(mat, gray, CV_RGB2GRAY);
cv::cvtColor(gray, mat, CV_GRAY2RGB);
}
Редактировать: Исправил ответ благодаря вкладу Кристиана Рау.
Других решений пока нет …