opencv 单通道图像合成三通道RGB图时,图片显示不全?

opencv 单通道图像合成三通道RGB图时,图片显示(也保存过)不全,感觉宽度上拉伸,虽然图片尺寸一致,但只显示了原图1/3

cv::Mat bandCombine(cv::Mat& red, cv::Mat& green, cv::Mat& blue)
{
    int cols = red.cols;
    int rows = red.rows;

    cv::Mat combination(rows, cols, CV_8UC3, cv::Scalar(0, 0, 0));

    if (green.cols == cols && green.rows == rows && blue.cols == cols && blue.rows == rows)
    {
        for (int j = 0; j < rows; j++)
        {
            uchar *com_ptr = combination.ptr<uchar>(j); 
            uchar *blue_ptr = blue.ptr<uchar>(j);
            uchar *green_ptr = green.ptr<uchar>(j);
            uchar *red_ptr = red.ptr<uchar>(j);
            for (int i = 0; i < cols; i++)
            {  
                //error 只出现cols1/3的图像 rows是好的???
                com_ptr[3 * i] = blue_ptr[i];
                com_ptr[3 * i + 1] = green_ptr[i];
                com_ptr[3 * i + 2] = red_ptr[i];
            }
        }
    }
    else
        cout << "combination requires the same size" << endl;

    return combination;
}

【单通道】图片说明

【合成后】图片说明

感觉只剩左边1/3

c++

1个回答

对不起我蠢了,原图是灰度三通道
(应该从原图开始考虑的,毕竟已经合成彩色了那肯定不是合成的问题,原图都没有读取到另外2/3的区域...)

for()
   for()
   {
            //error 只出现cols1/3的图像 rows是好的???
                com_ptr[3 * i] = blue_ptr[3 * i];
                com_ptr[3 * i + 1] = green_ptr[3 * i];
                com_ptr[3 * i + 2] = red_ptr[3 * i];
        }
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐