OpenCV找到轮廓

时间:2015-07-09 12:30:17

标签: c++ opencv

以下用于在图像中查找轮廓的代码不会产生任何编译错误。但是,在运行时我得到了错误 “在OpenCV imshow文件中打开cv:断言失败(size.width> 0& size.height> 0)”。

我只使用imshow函数尝试了代码,删除后面的所有代码,代码运行正常,因此文件位置似乎不是问题!

非常感谢任何帮助。 提前谢谢!

#include <opencv\cv.h>
#include <opencv2\highgui\highgui.hpp>
#include <opencv\cvaux.h>
#include <opencv\cxcore.h>
#include <opencv2\imgproc\imgproc.hpp>
#include <iostream>
#include <conio.h>

using namespace cv;
using namespace std;

int main() {
    Mat img1;
    Mat output;

    Mat img = imread("blue.jpg"); 

    cvtColor(img, img1, CV_BGR2GRAY);
    threshold(img1, output, 176, 255, CV_THRESH_BINARY);
    imshow("hi", output);
    vector<vector<Point>> Contours;
    vector<Vec4i> hier;
    Mat final;

    findContours(img1, Contours, hier, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);

    for (int i = 0; i < Contours.size(); i++)
    {
        drawContours(final, Contours, i, Scalar(0, 255, 0), 1, 8, hier);
    }

    imshow("result", final);

    waitKey();
}

1 个答案:

答案 0 :(得分:2)

您正在此处绘制一个非初始化矩阵(final):

Mat final;
....
drawContours(final, Contours, i, Scalar(0, 255, 0), 1, 8, hier);

您应首先初始化final,例如:

Mat final = img.clone();