opencv图像坐标系
时间: 2025-04-30 15:25:43 浏览: 28
### OpenCV 中的图像坐标系解释
在OpenCV中,图像被视作二维矩阵,其中每个元素代表一个像素。对于彩色图像是三维矩阵,第三个维度用于存储颜色通道的信息。坐标系遵循先行后列的原则,在此体系下,原点位于左上角而非传统的笛卡尔坐标系中的左下角[^1]。
#### 坐标轴方向
- **X轴**:水平向右增加。
- **Y轴**:垂直向下增加。
这种定义意味着当提到`(x,y)`这样的坐标时,`y`实际上指的是行数(即高度),而`x`则指代列数(宽度)。因此,如果要访问某个具体位置上的像素值,则应按照先指定行索引再指定列索引的方式进行操作[^3]。
#### 访问与修改像素值的方法
有两种主要方法可以用来获取或设置特定坐标的像素值:
1. 使用 `at<T>(row, col)` 函数模板直接通过行列索引来存取数据;
2. 利用 `cv::Point(x, y)` 结构体作为参数传递给 `at<T>()` 方法。
需要注意的是,这两种调用形式虽然看起来不同,但在内部实现上是一致的——它们都转换成了基于行优先顺序的操作模式。例如,为了遍历整个图片并改变其颜色,下面展示了如何利用上述两种方式之一完成任务[^2]。
```cpp
// 创建200x300的RGB三通道全黑图像
cv::Mat image = cv::Mat::zeros(300, 200, CV_8UC3);
for(int row = 0; row < image.rows; ++row){
for(int col = 0; col < image.cols; ++col){
// 修改当前像素的颜色为白色
image.at<cv::Vec3b>(row, col)[0] = 255;
image.at<cv::Vec3b>(row, col)[1] = 255;
image.at<cv::Vec3b>(row, col)[2] = 255;
// 或者使用 Point 方式
// image.at<cv::Vec3b>(cv::Point(col,row))[0]=255;
// ...
}
}
```
此外,还可以借助其他函数如 `line()` 来绘制线条等图形对象到画布之上,这同样依赖于正确的理解和应用该坐标框架下的定位逻辑[^5]。
阅读全文
相关推荐


















