【发布时间】:2019-02-06 08:28:53
【问题描述】:
我必须使用 openCV 将像素访问到图像中,但起初我无法访问,因为 python 告诉我我想要访问的值超出了范围。
然后我搜索了这个错误,发现我应该使用image[y, x]而不是image[x, y]来访问一个像素。
我在这个页面的cmets中找到了这条信息,但是没有解释: https://www.pyimagesearch.com/2016/02/01/opencv-center-of-contour/
Adrian Rosebrock 2016 年 2 月 12 日下午 3:19 #: 在 OpenCV + NumPy 中访问像素值时,实际上是按 (y, x) 顺序而不是 (x, y) 顺序指定它们。因此,您需要使用:image[cY, cX]
那么,问题是......为什么我要在尝试访问像素时反转坐标?
【问题讨论】:
-
除 Fortran 外,大多数语言以行优先顺序存储矩阵,因此索引为
row, column,又名y, x。 -
OpenCV 对图像使用矩阵表示法(在 C++ 中甚至调用 cv::Mat),这意味着
(row,column)... 但是对于点,它们使用笛卡尔坐标,即(x,y)。一开始有点混乱 -
@PaulR 感谢您为问题命名!
-
我认为是因为矩阵表示,因为在opencv中,图像被表示为矩阵:stackoverflow.com/questions/25642532/…
-
非常简短的回答是,您只需要忍受他们是如何做到的......以及 BGR 而不是 RGB 通道排序。我想这是你为所有性能付出的代价:-)
标签: python-3.x numpy opencv