图像轮廓检测错误:OpenCV,C ++ [英] Image Contour Detection Error: OpenCV, C++

查看:140
本文介绍了图像轮廓检测错误:OpenCV,C ++的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在C ++环境中使用OpenCV编写一个程序来检测图像中的轮廓。

I am trying to write a program to detect contours within an image using OpenCV in the C++ environment.

它的问题是我没有得到编译错误,而是一个运行时错误。我不知道为什么;我按照书和OpenCV文档源来构建下面的代码,它应该工作正常,但它不...什么可能是错误的想法...?

The problem with it is that I don't get a compile error, but instead a runtime error. I have no idea why; I followed the book and OpenCV documentation sources to build the code below and it should work fine but it doesn't... any ideas on what might be wrong...?

#include "iostream"
#include<opencv\cv.h>
#include<opencv\highgui.h>
#include<opencv\ml.h>
#include<opencv\cxcore.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。他们去:

I bet that you are using the MSVC IDE. Anyway, your code has a lot of problems and I've covered most of them on Stackoverflow. Here they go:

  • Escape the slashes
  • Code safely and check the return of the calls
  • How Visual Studio loads files at runtime

我怀疑你的问题是 imread()失败,因为它没有找到该文件。上述连结可协助您解决这个问题。

I suspect that your problem is that imread() is failing because it didn't found the file. The links above will help you fix that.

这篇关于图像轮廓检测错误:OpenCV,C ++的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆