图像轮廓检测错误:OpenCV,C++



我正在尝试编写一个程序,以便在C++环境中使用OpenCV检测图像中的轮廓。

它的问题是我没有收到编译错误,而是运行时错误。我不知道为什么;我按照这本书和 OpenCV 文档资源构建了下面的代码,它应该工作正常,但它没有......关于可能出错的任何想法...?

#include "iostream"
#include<opencvcv.h>
#include<opencvhighgui.h>
#include<opencvml.h>
#include<opencvcxcore.h>
#include <iostream> 
#include <string> 
#include <opencv2/core/core.hpp> // Basic OpenCV structures (cv::Mat)
#include <opencv2/highgui/highgui.hpp> // Video write
using namespace cv;
using namespace std;
Mat image; Mat image_gray; Mat image_gray2; Mat threshold_output;
int thresh=100, max_thresh=255;
int main(int argc, char** argv) {
//Load Image
image =imread("C:/Users/Tomazi/Pictures/Opencv/ayo.bmp");
//Convert Image to gray & blur it
cvtColor( image, 
    image_gray, 
    CV_BGR2GRAY );
blur( image_gray, 
    image_gray2,
    Size(3,3) );
//Threshold Gray&Blur Image
threshold(image_gray2, 
    threshold_output, 
    thresh, 
    max_thresh, 
    THRESH_BINARY);
//2D Container
vector<vector<Point>> contours;
//Fnd Countours Points, (Imput Image, Storage, Mode1, Mode2, Offset??)
findContours(threshold_output,
    contours, // a vector of contours
    CV_RETR_EXTERNAL, // retrieve the external contours
    CV_CHAIN_APPROX_NONE,
    Point(0, 0)); // all pixels of each contours    
// Draw black contours on a white image
Mat result(threshold_output.size(),CV_8U,Scalar(255));
drawContours(result,contours,
    -1, // draw all contours
    Scalar(0), // in black
    2); // with a thickness of 2

    //Create Window
char* DisplayWindow = "Source";
namedWindow(DisplayWindow, CV_WINDOW_AUTOSIZE);
imshow(DisplayWindow, contours);

waitKey(0);
return 1;
}

我敢打赌你使用的是MSVC IDE。无论如何,你的代码有很多问题,我已经在Stackoverflow上介绍了其中的大部分问题。他们来了:

  • 转义斜杠
  • 安全编码并检查呼叫的返回
  • Visual Studio 如何在运行时加载文件

我怀疑您的问题是imread()失败了,因为它没有找到该文件。上面的链接将帮助您解决此问题。

最新更新