我想知道你是否能告诉我imread和cvLoadImageM之间的区别

时间:2013-08-29 05:38:49

标签: c++ opencv

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

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

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

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

  

ms(框,区域,Mat());

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

#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 个答案:

答案 0 :(得分:1)

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

另一种方法是切换构建模式Debug&lt; - &gt;发布但我想你想用适当的opencv库设置每个构建模式,从长远来看。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

像Cricketer一样,cvLoadImage()返回一个指向图像的指针。 在您的代码中更改此内容

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

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

这个代码对我来说很好,两种方式都可以完成图像的完整路径

"C:\\Users\\noob\\Pictures\\01a.png"

答案 3 :(得分:0)

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

请检查,如果你正在混合调试&amp;发布代码,例如链接到发布版本的* d.libs或其他方式。它很可能与那个相关