微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

COII:哪些 OpenCV 函数会暗中改变 COI?

如何解决COII:哪些 OpenCV 函数会暗中改变 COI?

我正在使用 OpenCV(在 C# 中通过 Emgu)。当我使用 MaxDegreeOfParallelism=1 运行我的(~10k 行)代码时,一切都很好。当我真正并行运行时,我得到一个 OpenCV 异常,即卷积(和其他一些函数不支持 COI。

显然,有些东西将 Image[Gray,byte] 的 COI 更改为 1,做一些工作,然后将其更改回 0。串行,这很好。同时,它打破了其他在 COI≠0 时崩溃的 OpenCV 函数。直到今天我才知道 COI,所以它一定是 OpenCV 中的一些预建函数。 (就像 img.copy 如何巧妙地使用 img.ROI。)

我用“img.SafeMethod(”替换了每个本地的“img.Method(”,在那里我写了一个安全的来检查COI,锁定img,执行实际方法,解锁img,然后再次检查COI。我替换了大量{ .CountNonzero,.copy,.Or,.Not,.Threshold,.Sub,.And,. Convolution,.Xor }。它仍然中断(仅并行)。

我显然在某处错过了 img.Method,因为有人正在更改 img.COI(同时忽略了 img 锁)。知道哪些 OpenCV 方法来回改变 COI,以便我可以在它们工作时锁定?

编辑:关于 COI https://docs.opencv.org/2.4/modules/core/doc/old_basic_structures.html?highlight=cvcreateimage#void%20cvSetImageCOI(IplImage*%20image,%20int%20coi)

的更多信息

还有我的例外。 https://docs.opencv.org/3.4/d1/d0d/namespacecv_1_1Error.html#a759fa1af92f7aa7377c76ffb142abccaa76945d22fdcd44f361e444bc59a8337f

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。