在opencv中,如何将灰度图像复制并缩放为另一个彩色图像

Posted

技术标签:

【中文标题】在opencv中,如何将灰度图像复制并缩放为另一个彩色图像【英文标题】:In opencv how do I copy and scale a greyscale image into another colour image 【发布时间】:2012-12-03 07:51:14 【问题描述】:

我想在 openCV 中将多个图像合成到一个窗口中。我发现我可以在一个图像中创建一个 ROI 并将另一个彩色图像复制到该区域而没有任何问题。

将源图像切换为我已对其进行了一些处理的图像不起作用。

最终我发现我已将 src 图像转换为灰度图像,并且在使用 copyTo 方法时它没有复制任何内容。

我已经用我的基本解决方案回答了这个问题,该解决方案仅适用于灰度颜色。如果您使用其他 Mat 图像类型,则必须执行额外的测试和转换。

【问题讨论】:

【参考方案1】:

我意识到我的问题是我试图将灰度图像复制到彩色图像中。因此,我必须先将其转换为适当的类型。

drawIntoArea(Mat &src, Mat &dst, int x, int y, int width, int height)

    Mat scaledSrc;
    // Destination image for the converted src image.
    Mat convertedSrc(src.rows,src.cols,CV_8UC3, Scalar(0,0,255));

    // Convert the src image into the correct destination image type
    // Could also use MixChannels here.
    // Expand to support range of image source types.
    if (src.type() != dst.type())
    
        cvtColor(src, convertedSrc, CV_GRAY2RGB);
    else
        src.copyTo(convertedSrc);
    

    // Resize the converted source image to the desired target width.
    resize(convertedSrc, scaledSrc,Size(width,height),1,1,INTER_AREA);

    // create a region of interest in the destination image to copy the newly sized and converted source image into.
    Mat ROI = dst(Rect(x, y, scaledSrc.cols, scaledSrc.rows));
    scaledSrc.copyTo(ROI);

我花了一段时间才意识到图像源类型不同,我忘记了我已将图像转换为灰度以进行其他一些处理步骤。

【讨论】:

以上是关于在opencv中,如何将灰度图像复制并缩放为另一个彩色图像的主要内容,如果未能解决你的问题,请参考以下文章

opencv如何将lena.jpg的灰度值读取出来并在计算机上保存下来

如何隔离轮廓内的所有内容,对其进行缩放并测试与图像的相似性?

在opencv中,如何把灰度图像中的黑和白快速转化为1和0;

使用 openCV 在 C++ 中查看灰度 RAW 图像文件

对图像的仿射变换

C ++ Opencv重新缩放边界矩形