在OpenCV中将彩色图像转换为灰度问题

时间:2014-01-28 14:42:27

标签: c++ visual-studio opencv

当我尝试将彩色图像转换为灰度时,我遇到了问题。错误是:“cvGetSize中的错误参数(数组应该是CvMat或IplImage)”,但我可以设法加载原始彩色图像并显示它,当我评论所有与灰度相关的行时。我该如何解决这个错误?

#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <iostream>
#include <stdio.h>


int main(int argc, char** argv)
{
    //Loading the color image 
    IplImage* frame = cvLoadImage("lena.jpg");
    //Converting the color image to grayscale
    IplImage* grayframe = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);
    cvCvtColor(frame, grayframe, CV_RGB2GRAY);

    //Creating a window for color image
    cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);
    //Creating a window for grayscale image
    cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);
    // Showing the color image
    cvShowImage("Example1", frame);
    // Showing the grayscale image
    cvShowImage("Example2", grayframe);
    //Showeing for X seconds
    cvWaitKey(2000);
    cvReleaseImage(&frame);
    cvDestroyWindow("Example1");
    cvReleaseImage(&grayframe);
    cvDestroyWindow("Example2");
    return 0;
}

1 个答案:

答案 0 :(得分:2)

为什么Iplimage?

尝试使用Mat,如果您希望将来扩展这些示例。

Mat image = imread("lena.jpg");
Mat gray;
cvtColor(image,gray,CV_BGR2GRAY);

这将很容易,会给你灰度图像。

但是,如果有特定原因使用C api,那么, 问题出在

IplImage* grayframe = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1);

我不知道具体原因,但是,我可以为您提供运行代码的替代方案。

int x= frame->width, y=frame->height;
IplImage* grayframe = cvCreateImage(cvSize(x,y), IPL_DEPTH_8U, 1);

Tyr it,它可能适合你