使用OpenCv应用灰度化

我正在尝试使用C,Lua和OpenCv进行编程,但我在使用OpenCv方法时遇到了问题。

首先,我想将图像转换为灰度图像。我正在尝试这样做:

静态int treatments_grayscale(lua_State* L) { 
    void * ptr;
    ptr = lua_touserdata(L, 1);

    int w,h; 
    w = lua_tointeger(L, 2);
    h = lua_tointeger(L, 3);

    cv :: Mat * img = new cv :: Mat(w,h,CV_8UC4,ptr);

    cvtColor(img,img,CV_RGB2GRAY);

    //返回图像
    lua_pushlstring(L,(char *)img- > data,w * h * 4);
    返回1;
}

运行此代码时,我会收到以下错误:

“函数cvarrToMat中的未知数组类型”

我做错了什么?

我还尝试过这样做:

cv :: Mat * img = new cv :: Mat(w,h,CV_8UC4,ptr);

IplImage * dst_img = cvCreateImage(cvSize(w,h),IPL_DEPTH_8U,4);
dst_img - > imageData = (char *)img- > data;

cvCvtColor(dst_img,dst_img,CV_RGB2GRAY);

然后...错误:

“错误:(-215)dst.data == dst0.data在函数cvCvtColor中”

谢谢! =)

点赞
用户2955707
用户2955707

我认为有错误,因为源图像不应该与目标图像具有相同的尺寸。

当我将 RGB 图像转换为灰度图像时,我通常会使用以下代码:

IplImage * cvImage = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
IplImage * cvGray = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
cvImage->imageData = (char *) img->data;
cvCvtColor(cvImage, cvGray, CV_RGB2GRAY);
2014-06-04 14:54:36