RGB到灰度(无法显示完整图像) 我有一个使用C++的简单代码(与OpenCV结合) 这里是代码(main)

RGB到灰度(无法显示完整图像) 我有一个使用C++的简单代码(与OpenCV结合) 这里是代码(main),c++,opencv,grayscale,C++,Opencv,Grayscale,这是灰度的函数 void h_grayscale( unsigned char* h_in, unsigned char* h_out){ for (unsigned int i=0; i< width*height; i++){ unsigned int index = i*3; double temp = 0.3*h_in[index]+0.6*h_in[index+1]+0.1*h_in[index+2]; h_out[i] =

这是灰度的函数

void h_grayscale( unsigned char* h_in, unsigned char* h_out){
    for (unsigned int i=0; i< width*height; i++){
        unsigned int index = i*3;
        double temp = 0.3*h_in[index]+0.6*h_in[index+1]+0.1*h_in[index+2];
        h_out[i] = (unsigned char)temp;
    }
}
void h_灰度(无符号字符*h_输入,无符号字符*h_输出){
for(无符号整数i=0;i
但结果图像分成3个部分与灰度图像

请告诉我我的代码有什么问题??图特
thx

您需要编辑代码以仅创建一个通道输出图像,因为它是灰度图像:

IplImage* image_output =cvCreateImage(cvGetSize(image_input), IPL_DEPTH_8U, 1);

也可以通过“使用C++(带有OpenCV)的简单代码)来想象这样的事情:

int main()
{
    Mat image_input = imread("test.jpg");
    Mat image_output;

    cvtColor(image_input, image_output, CV_BGR2GRAY);

    imshow("Original", image_input);
    imshow("CPU", image_output);
    waitKey(0);

    return 0;
}

你的输出图像不是应该在通道设置为1的情况下创建,而不是在通道设置为1的情况下创建吗?我还是不明白,为什么通道设置为1??我认为通道应该与input_image>相同。我只是猜测,因为我不知道CV是如何工作的,但您的灰度代码正在将三个通道(R、G、B)转换为一个通道(灰度)。哦,感谢它的工作^_^okk问题解决了。。。我不知道这是关于频道的。。谢谢^_^
int main()
{
    Mat image_input = imread("test.jpg");
    Mat image_output;

    cvtColor(image_input, image_output, CV_BGR2GRAY);

    imshow("Original", image_input);
    imshow("CPU", image_output);
    waitKey(0);

    return 0;
}