C++ 二维vector在if语句内赋值后退出即重置问题求助
核心结论
你的代码从未执行过if分支内的赋值逻辑,不是赋值后被重置,问题根源是if判断条件永远无法被满足。
问题原因
- 测试代码的初始化逻辑导致判断条件永假:你给所有行的
j∈[9,14]位置都赋值为-1,当遍历到第一个满足P[i][j]==-1的位置j=9时,P[i-1][j](上一行同列位置)的值也是-1,不满足你要求的P[i-1][j]==0的判断条件,整个if分支永远不会执行,自然不会有赋值操作。 - 原业务代码存在相同的逻辑问题:你用图像亮区(
img.at<uchar>(i,j)>=220)对应P[i][j]=-1,如果亮区是纵向连通的,那么遍历到亮区位置时,上一行同列大概率也是-1,同样触发不了判断条件。
验证方法
你可以临时把if判断条件简化为仅判断P[i][j]==-1,运行后就能看到vector的值被正常修改,确认是判断条件的问题,而非二维vector的赋值逻辑有问题。
修正建议
如果你的需求是给所有连通的-1区域做标记,当前的左上判断逻辑本身不符合要求,你应该改用标准的连通域标记方法:
- 遍历所有
P[i][j]==-1的位置 - 遇到未标记的-1位置时,bin自增,然后用BFS/DFS遍历整个连通区域,把区域内所有位置都赋值为当前bin值
内容的提问来源于stack exchange,提问作者user16977772
相关产品推荐
相关产品推荐

