我写了一个小程序,其中我想基于 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/