OpenCV C ++ VS2010:FindContours抛出异常

时间:2017-11-21 06:43:21

标签: c++ visual-studio-2010 opencv

您好我正在尝试运行一个简单的OpenCV程序来检测图片中的轮廓。但是,findcontours不断抛出异常。

这是我的代码:

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <opencv2\opencv.hpp>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/nonfree/nonfree.hpp"
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

/** @function main */
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"


#include <math.h>
#include <string.h>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, const char * argv[]) {

    IplImage* img = cvLoadImage("C:\\Users\\310217955\\Documents\\Visual Studio 2010\\Projects\\aviTest\\Debug\\Pictures\\Capture.jpg");
	cv::Mat image = cv::cvarrToMat(img);
    if (!image.data) {
        std::cout << "Image file not found\n";
        return 1;
    }

    //Prepare the image for findContours
    cv::cvtColor(image, image, CV_BGR2GRAY);
    cv::threshold(image, image, 128, 255, CV_THRESH_BINARY);

    //Find the contours. Use the contourOutput Mat so the original image doesn't get overwritten
    //std::vector<std::vector<cv::Point> > contours;
	vector<cv::Mat> contours;
    cv::Mat contourOutput = image.clone();
    cv::findContours( contourOutput, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE );

    //Draw the contours
    cv::Mat contourImage(image.size(), CV_8UC3, cv::Scalar(0,0,0));
    cv::Scalar colors[3];
    colors[0] = cv::Scalar(255, 0, 0);
    colors[1] = cv::Scalar(0, 255, 0);
    colors[2] = cv::Scalar(0, 0, 255);
    for (size_t idx = 0; idx < contours.size(); idx++) {
        cv::drawContours(contourImage, contours, idx, colors[idx % 3]);
    }

    cv::imshow("Input Image", image);
    cvMoveWindow("Input Image", 0, 0);
    cv::imshow("Contours", contourImage);
    cvMoveWindow("Contours", 200, 0);
    cv::waitKey(0);
	system("PAUSE");
    return 0;
}

这是一个异常的图像:

Exception thrown

我该如何解决这个问题?是否有一个dll文件我缺少或我需要解决一些设置?

我对代码进行了以下更改

vector<Vec4i> hierarchy;
findContours( contourOutput, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);

但现在我得到以下例外:

enter image description here

1 个答案:

答案 0 :(得分:1)

你的代码工作得很好。我只在项目文件中注释掉了头文件stdafx.h和nonfree.hpp。这是我得到enter image description here

的输出

确保提供输入img的正确路径或将输入图像粘贴到visual studio解决方案目录中,然后直接加载图像。

问题可能出在其中一个模块上。我建议重新安装opencv(尝试下载最新版本),然后再试一次。确保添加xyzd.lib文件,如opencv_highgui330d.lib opencv_imgproc330d.lib  在linker>>Input>> additional dependencies。版本可能因您而异。 希望这对你有所帮助!