2

我有从 RGB 图像创建的 cv::Mat,每个组件 8 位,4 个通道(CV_8UC4)。我想将它转换为灰度垫,然后将我的灰度垫存储回 4 通道垫。我怎样才能做到这一点?以下代码将我带到 EXC_BAD_ACCESS:

void myMethod(const Mat& mat) {
      cv::Mat gray;
      cv::cvtColor(mat, gray, CV_RGB2GRAY);
      gray.copyTo(mat);
}
4

1 回答 1

3

如果要更改数据,则不能使用 const 引用:

void toGrayscale(cv::Mat& mat)
{
     cv::Mat gray;
     cv::cvtColor(mat, gray, CV_RGB2GRAY);
     cv::cvtColor(gray, mat, CV_GRAY2RGB);
}

编辑:由于 Christian Rau 的输入更正了答案。

于 2012-09-06T11:25:53.037 回答