【问题标题】:OpenCV: How to convert CV_8UC1 mat to CV_8UC3OpenCV:如何将 CV_8UC1 垫子转换为 CV_8UC3
【发布时间】:2019-08-24 18:09:47
【问题描述】:

如何使用 OpenCV 将 CV_8UC1 Mat 转换为 CV_8UC3?

Mat dst;
Mat src(height, width, CV_8UC1, (unsigned char*) captureClient->data());
src.convertTo(dst, CV_8UC3);

但是 dst.channels() = 1

【问题讨论】:

  • 你到底想问什么?
  • 您是否希望 3 通道图像在所有通道中的像素值与 1 通道图像相同?

标签: opencv


【解决方案1】:

我发现最好的方法是:

cvtColor(src, dst, COLOR_GRAY2RGB);

图像看起来与灰度 CV_8UC1 时相同,但它将是 CV_8UC3 类型的 3 通道图像。

【讨论】:

    【解决方案2】:

    来自convertTo上的documentation

    void Mat::convertTo(Mat& m, int rtype, double alpha=1, double beta=0) const

    rtype – 所需的目标矩阵类型,或者更确切地说,深度(因为通道数将与源通道数相同)。如果 rtype 为负数,则目标矩阵将与源矩阵具有相同的类型。

    您想为要创建的 3 个通道中的每一个创建一个矩阵,然后使用合并功能。查看this问题的答案

    【讨论】:

      【解决方案3】:

      约定是,对于CV_8UC3 类型,像素值范围从0255,对于CV_32FC3 类型,从0.01.0。因此,您需要使用255.0 的比例因子,而不是1.0

      Mat::convertTo(newImage, CV_32FC1, 255.0);
      

      【讨论】:

        猜你喜欢
        • 2020-04-25
        • 1970-01-01
        • 2016-01-03
        • 2017-08-27
        • 2013-02-26
        • 2019-11-23
        • 1970-01-01
        • 2015-02-10
        • 2021-02-01
        相关资源
        最近更新 更多