0

Mat img=imread("box.png",1);

Mat img=cvLoadImage("box.png",1);

当我尝试前一个时,项目无法加载文件,但当我使用后一个时,它确实加载了。所以.. box.png 在项目文件夹中。你能帮我看看我的imread有什么问题吗?还是应该添加 box.png 所在的目录?

我试图做的是这段代码从图像中提取 mser 区域。当编译器无法加载图像文件时,运行代码时发生错误,即使我已将 imread 更改cvLoadImageM代码也停止在

毫秒(框,区域,垫());

所以我做错了什么?????????这里

#include <stdio.h>
#include <iostream>
#include <vector>
//#include <string.h>
#include "opencv\cv.h"
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;


int main()
{
    Mat box = imread("01a.png",1);
    if(box.empty()) 
    { 
        fprintf(stderr, "Can not load image" ); 
        return -1; 
    } 
    MSER ms;
    vector<vector<Point>> regions;
    ms(box, regions, Mat());
    for (int i = 0; i < regions.size(); i++)
    {
        ellipse(box, fitEllipse(regions[i]), Scalar(255));
    }
    imshow("mser", box);
    waitKey(0);
    return 0;
}
4

4 回答 4

1

我昨天遇到了同样的问题,我找到了解决方案。确保使用的 opencv 库与每个 opencv 库的构建模式匹配(例如 Release -> cvcore242.lib (dll) Debug -> cvcore242d.lib(或 dll))。确保更改您的项目 deps->linker->dependencies 以加载正确的(调试或发布)opencv 库。

另一种方法是切换构建模式 Debug <-> Release,但我想从长远来看,您希望使用适当的 opencv 库设置每种构建模式。

于 2013-08-29T14:47:03.230 回答
0

就像板球运动员说 cvLoadImage() 返回一个指向图像的指针。在你的代码中改变它

    - Mat box = imread("01a.png",1);

    + IplImage* pBox = cvLoadImage("01a.png");
    + Mat box = pBox;

代码对我来说都很好,可以输入图像的完整路径

"C:\\Users\\noob\\Pictures\\01a.png"
于 2013-08-29T07:14:53.813 回答
0

imread() 是新 OpenCV C++ 接口的一部分,与 Mat 结构一起使用。cvLoadImage() 是一个返回 IplImage*(指向 IplImage 的指针)的 C 函数

于 2013-08-29T05:53:29.990 回答
0

所以, imread 失败了,你试图用 cvLoadImage 解决这个问题?呸,不,不要那样做。

请去检查一下,如果你混合调试和发布代码,比如链接到发布版本的 *d.libs 或其他方式。这很可能与此有关

于 2013-08-29T08:21:08.360 回答