cvErode错误 - 未知数组类型

时间:2012-09-19 18:28:53

标签: opencv

我试图在将图像转换为YCrCb图像空间后执行JPEG图像的侵蚀。使用以下代码

 YCrCbMin.val[0] = 0;
 YCrCbMin.val[1] = 131;
 YCrCbMin.val[2] = 80;

 YCrCbMax.val[0] = 255;
 YCrCbMax.val[1] = 185;
 YCrCbMax.val[2] = 135;

 imshow("img",Img);// Img is the JPEG image I load off the disk. 
 waitKey(0);

 Mat YCrCbImg;
 cvtColor(Img, YCrCbImg, CV_BGR2YCrCb);

 Mat erodedImg;
 inRange(YCrCbImg, YCrCbMin, YCrCbMax, erodedImg);

 Mat InterMediateImg     = YCrCbImg;
 IplConvKernel* element  = new IplConvKernel();

 element->nCols      = 12;   element->nRows      = 12;   element->anchorX    = 6;    element->anchorY    = 6;

  cvErode(&erodedImg, &InterMediateImg, element, 1);
  element->nCols      = 6;    element->nRows      = 6;    element->anchorX    = 3;    element->anchorY    = 3;
  cvDilate(&InterMediateImg, &erodedImg, element, 2);

在第一次侵蚀时,我收到以下错误,如屏幕截图所示。

Error Image

我使用以下图像作为输入

index.jpg

我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

当您致电cvErodecvDilate时,可能会显示错误。您正在混合使用C和C ++接口。所以,例如,在

cvErode(&erodedImg, &InterMediateImg, element, 1);

erodedImgInterMediateImg类型为cv::Mat时,类型为cvMatcvDilate也是如此。

您可以使用新界面:

cv::erode

void erode(const Mat& src, Mat& dst, const Mat& element, Point anchor=Point(-1, -1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue())

cv::dilate

void dilate(const Mat& src, Mat& dst, const Mat& element, Point anchor=Point(-1, -1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue())

或从cv::Mat转换为cvMat (link to cheatsheet)

CvMat cvmat = img; // convert cv::Mat -> CvMat


另请注意,当您调用这些函数时,目标矩阵不为空,并且可能与源矩阵的类型不同,因此如果我没有弄错的话,您也有可能在错误中运行。< / p>


Nice erosion and dilation tutorial in OpenCV 2.4.2