2 dsezcrt dsezcrt 于 2015.06.13 10:18 提问

怎解决闪退问题,显示运行成功,可是那个黑框框一出来就自动退出了。【急急急】 2C

以前运行成功过一次,之后就一直是闪退,跪求解答,我是菜鸟——【加System("PAUSE")还有getchar()都不行】
代码如下
#include

#include

#include

#include

using namespace std;

using namespace cv;

// 移除过小或过大的轮廓

void getSizeContours(vector> &contours)

{

int cmin = 100; // 最小轮廓长度

int cmax = 1000; // 最大轮廓长度

vector>::const_iterator itc = contours.begin();

while(itc != contours.end())

{

if((itc->size()) < cmin || (itc->size()) > cmax)

{

itc = contours.erase(itc);

}

else ++ itc;

}

}

// 计算连通区域的轮廓,即二值图像中相连像素的形状

int main()

{

Mat image = imread(" C:\Users\Administrator\Desktop\论文\123.jpg",0);

if(!image.data)

{

cout << "Fail to load image" << endl;

return 0;

}

Mat imageShold;

threshold(image, imageShold, 100, 255, THRESH_BINARY); // 必须进行二值化

vector> contours;

//CV_CHAIN_APPROX_NONE 获取每个轮廓每个像素点

findContours(imageShold, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE, cvPoint(0,0));

getSizeContours(contours);

cout << contours.size() << endl;

Mat result(image.size(), CV_8U, Scalar(255));

drawContours(result, contours, -1, Scalar(0), 2); // -1 表示所有轮廓

namedWindow("result");

imshow("result", result);

namedWindow("image");

imshow("image", image);

waitKey(0);

return 0;

}

8个回答

u013467442
u013467442   2015.06.13 13:36

crtl+F5. 或者在命令行下运行。打开cmd,把目录切换到你的可执行程序下,然后运行。

lx624909677
lx624909677   Ds   Rxr 2015.06.13 12:49

在return 0上一行加getchar(),或者直接按Ctrl+F5来运行程序

u012377333
u012377333   Rxr 2015.06.13 14:23

添加system(“pause”);
或者是getchar();
就可以暂停程序了

songhtao
songhtao   Rxr 2015.06.13 15:01

#include

#include

using namespace std;

using namespace cv;

// 移除过小或过大的轮廓

void getSizeContours(vector > &contours)

{

int cmin = 100; // 最小轮廓长度

int cmax = 1000; // 最大轮廓长度

vector > ::const_iterator itc = contours.begin();

while (itc != contours.end())

{

    if ((itc->size()) < cmin || (itc->size()) > cmax)

    {

        itc = contours.erase(itc);

    }

    else
        ++itc;

}

}

// 计算连通区域的轮廓,即二值图像中相连像素的形状

int main()

{

Mat image = imread(" C:\Users\Administrator\Desktop\论文\123.jpg", 0);

if (!image.data)

{

    cout << "Fail to load image" << endl;

    return 0;

}

Mat imageShold;

threshold(image, imageShold, 100, 255, THRESH_BINARY); // 必须进行二值化

vector > contours;

// CV_CHAIN_APPROX_NONE 获取每个轮廓每个像素点

findContours(imageShold, contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE,
    cvPoint(0, 0));

getSizeContours(contours);

cout << contours.size() << endl;

Mat result(image.size(), CV_8U, Scalar(255));

drawContours(result, contours, -1, Scalar(0), 2); // -1 表示所有轮廓

namedWindow("result");

imshow("result", result);

namedWindow("image");

imshow("image", image);

waitKey(0);

scanf("%*c");

return 0;

}

jianjian1992
jianjian1992   2015.06.13 19:36

system(“pause”);我就是用这个的

u012965373
u012965373   2015.06.13 20:01

你代码原本就有问题,没执行完毕就退出了。和暂停没关系

zhi_ai_yaya
zhi_ai_yaya   Rxr 2015.06.14 19:52

因为程序的退出点(代码行return X;)不止一个。
在所有的return前面加上system("pause")或者是getchar();是一定可以中断程序的。
C++里面,这个规则是最常用的。

yangsd18118
yangsd18118   2015.06.13 10:33

按F5,或者加System("PAUSE")

Csdn user default icon
上传中...
上传图片
插入图片