Opencv 2.1 Sobel检测器通过错误

Posted

技术标签:

【中文标题】Opencv 2.1 Sobel检测器通过错误【英文标题】:Opencv 2.1 Sobel detector passing error 【发布时间】:2011-11-12 15:42:18 【问题描述】:

我正在尝试对图像执行 Sobel 变换,但它给出了以下错误:

错误:从“IplImage*”类型的表达式中对“cv::Mat&”类型的引用无效初始化| cv.hpp|254|错误:传递 'void cv::Sobel(const cv::Mat&, cv::Mat&, int, int, int, int, double, double, int)'| 的参数 2 ||=== 构建完成:2 个错误,0 个警告 ===|

是不是我误解了手册的内容? 我正在使用 opencv v2.1 文档

 IplImage* img=cvLoadImage("fight1.png");

           CvMat *mat = cvCreateMat(img->height,img->width,CV_32FC3 );
           //Get width and height
           int w=img->width;
           int h=img->height;
           //create Images
           IplImage* img2=cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
           IplImage* img3=cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
           //convert to Mat
           cvConvert(img,mat);

           //prepare stream reader
           ofstream ob;
           ob.open("object.txt");

            //Perform Sobel
           cvCvtColor( img,img2,CV_RGB2GRAY);
           Sobel(img2,img3,32 ,1,3,1.0,1.0,BORDER_DEFAULT);
            //cvLaplace( img, img2);

【问题讨论】:

【参考方案1】:

您混合使用 C 和 C++ 语法。选择其中之一,并使用正确的文档。

在这里,您以 C 风格 (IplImage) 声明了矩阵,并调用了 cv::Sobel(),而不是 cvSobel()。

【讨论】:

以上是关于Opencv 2.1 Sobel检测器通过错误的主要内容,如果未能解决你的问题,请参考以下文章

opencv入门之九Opencv边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器

OpenCV——Sobel边缘检测

Python+opencv利用sobel进行边缘检测(细节讲解)

python-opencv-图像边缘检测Sobel算子

OpenCV 边缘检测 Sobel

Opencv图像边缘检测——Roberts算子(手写)Sobel算子(手写和调包)Scharr算子Laplacian算子