gpt4 book ai didi

opencv - cvErode 错误 - 未知数组类型

转载 作者:行者123 更新时间:2023-12-02 16:57:18 26 4
gpt4 key购买 nike

在将图像转换为 YCrCb 图像空间后,我试图对 JPEG 图像进行腐 eclipse 。使用以下代码

 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);

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

Error Image

我已使用以下图像作为输入

index.jpg

我在这里做错了什么?

最佳答案

调用 cvErode 时可能会出现该错误。和 cvDilate .您正在混合 C 和 C++ 接口(interface)。所以,例如,在
cvErode(&erodedImg, &InterMediateImg, element, 1);erodedImgInterMediateImg属于 cv::Mat 类型当它们应该是 cvMat 类型时. cvDilate 也是如此.

您可以使用新界面:

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
另请注意,当您调用这些函数时,目标矩阵不是空的,并且可能与源矩阵的类型不同,因此如果我没记错的话,您也有可能在此处运行错误。

Nice erosion and dilation tutorial in OpenCV 2.4.2

关于opencv - cvErode 错误 - 未知数组类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com