【问题标题】:Why are opencv's Mat::rows and Mat::cols signed instead of unsigned?为什么 opencv 的 Mat::rows 和 Mat::cols 是有符号的而不是无符号的?
【发布时间】:2014-03-14 02:46:09
【问题描述】:

我正在编译一个带有 gcc 的 -Wall 标志的程序。我在某个时候对Mat::colsMat::rows 进行了比较(使用无符号整数),并收到有关比较有符号整数和无符号整数的警告。尽管丢弃它并不是什么大不了的事,但我很好奇 Mat 具有负大小的原因是什么。

从逻辑上讲,矩阵不能比空矩阵(0 行和 0 列)更空,那么 -1 行或 -1 列的矩阵是什么意思?

There doesn't seem to be much performance difference between computations on signed and unsigned ints either.

【问题讨论】:

  • 我认为这只是一个设计缺陷。很多人,包括许多知名和大型库的作者,都没有很好地使用整数类型。对各种整数使用int 是一个常见错误。
  • 我误解了这个问题,我的错。我考虑了 Mat 中的值。删除我的帖子。
  • 我也讨厌 .rows 和 .cols 是有符号的……只是习惯于循环遍历 std::vector 的无符号类型……
  • 我认为 vlad 关于 int 循环计数器的说法可能是一个原因。我个人总是使用 size_t 作为循环计数器类型。需要更多输入,但大小和索引的类型是正确的

标签: c++ opencv


【解决方案1】:

我认为是因为大部分 int i 被用作循环计数器。使用 uint 作为 cols 和 rows 会出现许多警告。此外,增加尺寸差异会更容易出错。

除此之外。在我看来,OpenCv 根本就不是一个好的设计的好例子。 有几十个糟糕的类设计的例子。生成文档的设计也很糟糕(例如,函数的所有重载及其参数都混合在一起)。

但它是一个非常全面和优秀的图像处理库。这就是很多借口:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2020-06-02
    • 1970-01-01
    • 2014-08-20
    • 2012-02-24
    • 2012-04-26
    相关资源
    最近更新 更多