You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV C++使用filter2D自定义锚点触发normalizeAnchor断言错误求助

Assertion failed (anchor.inside(Rect(0,0,ksize.width,ksize.height))) in cv::normalizeAnchor)

问题原因

该报错的触发核心和使用的OpenCV版本相关:

  • 较老的OpenCV 2.x版本中,normalizeAnchor函数的锚点自动调整逻辑仅在坐标等于-1时生效,其余负坐标不会被自动修正,会直接执行范围校验。
  • 本次使用的是3×3尺寸的内核,校验规则要求锚点必须落在内核范围内,即满足 0 ≤ x < 3 且 0 ≤ y < 3。

你传入的Point(2,-2)中y坐标为-2,不等于-1不会被自动修正,不符合范围要求,因此触发断言报错。之前测试传入的Point(1,-1)中y坐标等于-1,会被自动修正为内核中心的y坐标1,符合范围要求,因此运行正常。

解决方案

可根据实际需求选择对应方案:

  • 自定义锚点位置时,确保传入的x、y坐标都满足 ≥0 且 < 对应内核的宽/高,3×3内核的合法锚点x取值为0、1、2,y取值为0、1、2。
  • 如需直接使用内核中心作为锚点,直接传入Point(-1,-1)即可,OpenCV会自动计算中心坐标。
  • 如需使用特殊偏移的锚点,可先自行把负坐标转换为对应合法正坐标后再传入。

内容的提问来源于stack exchange,提问作者Đăng Quý

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:27:03