当前位置: 代码迷 >> VC/MFC >> opencv取轮廓发生异常
  详细解决方案

opencv取轮廓发生异常

热度:160   发布时间:2016-05-02 03:42:47.0
opencv取轮廓发生错误
刚刚接触opencv,将图像阈值化之后取轮廓总是发生中断,显示

代码如下:
#include <iostream>
#include<stdio.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;

Mat src, src_gray, dst, result, dst_open, dst_open_gray;
int thresh;
int ElementSize = 3;
void Process();
void ElementSizeChange(int, void *);
int Otsu(Mat&image);

int main()
{
src = imread("1.jpg");
//检查图片是否读入
if (!src.data)
{
cout << "读取图片错误!" << endl;
return false;
}
namedWindow("原图");
imshow("原图", src);

//转换为灰度图
cvtColor(src, src_gray, COLOR_RGB2GRAY);
thresh = Otsu(src_gray);
printf("\n\n\n\n\n由最大类间方差得到的最佳阈值为:%d\n\n\n\n\n", thresh);
threshold(src_gray, dst, thresh, 255, THRESH_BINARY);
namedWindow("Otsu效果图");
imshow("Otsu效果图", dst);
//开运算
Mat element = getStructuringElement(MORPH_RECT, Size(2 * ElementSize + 1, 2 * ElementSize + 1), Point(ElementSize, ElementSize));
erode(dst, result, element);
dilate(result, dst_open, element);
namedWindow("开运算效果");
imshow("开运算效果", dst_open);
//创建轨迹条
createTrackbar("内核尺寸", "开运算效果", &ElementSize, 21, ElementSizeChange);
//寻找轮廓、绘制轮廓
RNG rng(12345);
vector<vector<Point>>contours;
vector<Vec4i>hierarchy;
findContours(dst_open_gray, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
Mat dst_contours = Mat::zeros(dst_open_gray.size(), CV_8UC3);
for (int i = 0; i < contours.size(); i++)
{
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
drawContours(dst_contours, contours, i, color, 2, 8, hierarchy, 0, Point());
}
imshow("轮廓图", dst_contours);
waitKey(0);
return 0;
}
运行红色代码时就会中断,显示上图的错误,纠结了很久,求问大神们应该怎么改?
------解决思路----------------------
这就是完整代码吗
------解决思路----------------------
?我帮你调试
------解决思路----------------------
dst_open_gray根本没赋值,为空。不崩溃才怪
------解决思路----------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。