我写了一个小程序,其中我想基于 vector 将帧的值设置为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

最佳答案

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

带下划线的部分是条件。在这种情况下,您说的是“保持循环播放,直到imageCorners的大小为” false”(即0)。但是您永远不会更改 vector 的大小,因此这种情况永远不会停止循环,i会不断变大,直到您尝试访问实际上不在imageCorners中的索引为止。

大概是循环直到i变得比 vector 大。然后使用
for (int i=0; i < imageCorners.size(); ++i) {

关于c++ - 为什么这个程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18055027/

10-10 22:17