【发布时间】:2013-08-29 05:38:49
【问题描述】:
Mat img=imread("box.png",1);
Mat img=cvLoadImage("box.png",1);
当我尝试前一个时,项目无法加载文件,但当我使用后一个时,它会加载。所以.. box.png 在项目文件夹中。你能帮我看看我的imread有什么问题吗?还是应该添加 box.png 所在的目录?
我试图做的是这段代码从图像中提取 mser 区域。当编译器无法加载图像文件时,运行代码时发生错误,即使我已将 imread 更改为 cvLoadImageM 代码停止在
ms(box, region, 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;
}
【问题讨论】:
-
函数 imread 工作正常,我一直在使用它。您是遇到错误还是发生了其他事情?
-
这个加载图像的代码很好。如果图像的大小很大,则 MSER 特征检测可能需要几秒钟。它会回来吗?您的代码在我的机器上编译并运行良好。
-
不,当我运行代码时,它首先进入 if 部分并停止,如果我使用 cvLoadImageM 进行调整,然后再次运行它,它会显示一条错误消息,“0x77C4AA3C(ntdll.dll )에(mser_component_extractor.exe의) 例外情况.. 0xC0000374:堆已损坏(变量:0x77C5FE38)。(我使用的是韩语界面,所以我不知道如何将消息翻译成英文,但如果我这样做..它有点像上面)