0

我写了一个小程序,我想根据一个向量将一帧的值设置为 255:

result =    cv::Mat::zeros(frame.size(),CV_8UC1);
std::vector<cv::Point2f> imageCorners;
.......................................................
    for ( int i = 0 ; imageCorners.size();i++){
                std::cout << imageCorners[i]<< std::endl;
                result.at<uchar>(imageCorners[i]) = 255;
                cv::imshow("result",result);
            }

我的问题是:为什么程序在完成循环后崩溃?即使我看到结果是正确的?我得到的错误信息是:

vector subscript out of range 
4

4 回答 4

4
for ( int i = 0 ; imageCorners.size();i++){
//                ^^^^^^^^^^^^^^^^^^^

下划线部分是条件。在这种情况下,您是在说“继续循环,直到大小imageCorners为“假”(即0)”。但是你永远不会改变向量的大小,所以这个条件永远不会停止循环,i不断变大,直到你尝试访问一个实际上不在imageCorners.

大概你的意思是循环直到i变得比向量大。然后使用

for (int i=0; i < imageCorners.size(); ++i) {
于 2013-08-05T09:44:56.573 回答
3

这对我来说看起来很狡猾:

 for ( int i = 0 ; imageCorners.size();i++){

你肯定想写这样的东西:

 for ( int i = 0 ; i < imageCorners.size();i++){
于 2013-08-05T09:45:31.563 回答
1

循环的条件imageCorners.size()仅产生存储在容器中的元素数量。只要true您将一个元素放入imageCorners. 你想要的是i < imageCorners.size().

于 2013-08-05T09:47:13.070 回答
0
for ( int i = 0 ; imageCorners.size();i++)

我认为如果 imageCorners.size() 不同于 0,这个循环将永远运行。所以当这个

std::cout << imageCorners[i]<< std::endl;

被执行,在某些时候i会越界,程序会崩溃。

于 2013-08-05T09:48:25.930 回答