row == height == Point.y
col == width  == Point.x
  • 1
  • 2

这是因为在计算机中,图像是以矩阵的形式保存的。

一张宽度640像素、长度480像素的灰度图保存在一个480 * 640的矩阵中。

先行后列。

而我们习惯的坐标表示是先X横坐标,再Y纵坐标。在OpenCV中需要对矩阵进行计算,先行再列。

这种隐形的错误需要细心。

一个典型的程序示例:

#include<opencv2/opencv.hpp>using namespace cv;int main() {Mat srcImage = imread("Lenna.png");Mat logo = imread("smile.png");Mat imageROI;imageROI = srcImage(Rect(0, 100, logo.cols, logo.rows));//imageROI = srcImage(Range(0, 0 + logo.cols), Range(100, 00 + logo.rows));Mat mask = imread("smile.png", 0);logo.copyTo(imageROI, mask);namedWindow("LOL");imshow("LOL", srcImage);waitKey(0);return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

这里

template<typename _Tp> inline
Rect_<_Tp>::Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height): x(_x), y(_y), width(_width), height(_height) {}
  • 1
  • 2
  • 3

Rect的构造函数给定的X,Y坐标即为矩形的左上角坐标。
设置为(0,100),效果如下。

对比例程

#include<opencv2/opencv.hpp>using namespace cv;int main() {Mat srcImage = imread("Lenna.png");Mat logo = imread("logo.jpg");Mat imageROI;//imageROI = srcImage(Rect(0, 200, logo.cols, logo.rows));imageROI = srcImage(Range(0, 0 + logo.cols), Range(200, 200 + logo.rows));Mat mask = imread("logo.jpg", 0);logo.copyTo(imageROI, mask);namedWindow("LOL");imshow("LOL", srcImage);waitKey(0);return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

这里是直接从源图像中截取出片区域,选取的是一个从0行,200列坐标点开始的一片宽 x 高的区域。

补充(详细解释)

  1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线;Y轴为图像矩形左边的那条垂直线。该坐标体系在诸如结构体Mat,Rect,Point中都是适用的。(虽然网上有学着说OpenCV中有些数据结构的坐标原点是在图片的左下角,但是我暂时还没碰到过)。

  2. 在使用image.at(x1, x2)来访问图像中点的值的时候,x1并不是图片中对应点的x轴坐标,而是图片中对应点的y坐标。因此其访问的结果其实是访问image图像中的Point(x2, x1)点,即与image.at(Point(x2, x1))效果相同。

  3. 如果所画图像是多通道的,比如说image图像的通道数时n,则使用Mat::at(x, y)时,其x的范围依旧是0到image的height,而y的取值范围则是0到image的width乘以n,因为这个时候是有n个通道,所以每个像素需要占有n列。但是如果在同样的情况下,使用Mat::at(point)来访问的话,则这时候可以不用考虑通道的个数,因为你要赋值给获取Mat::at(point)的值时,都不是一个数字,而是一个对应的n维向量。

转载自:https://blog.csdn.net/oqqenvy12/article/details/71933651

Opencv坐标系X、Y行列宽高之间的关系相关推荐

  1. OpenCV图像坐标系与行列宽高的关系

    这篇文章挺好    OpenCV图像坐标系与行列宽高的关系 图片坐标系,与从小到大见到的xy坐标系,x轴方向相同,只是y轴方向相反.

  2. 【openpyxl】设置样式(字体样式、行列宽高、对齐方式、边框、填充和渐变)

    1.字体样式 from openpyxl import Workbook from openpyxl.styles import Fontwb = Workbook() ws = wb.active# ...

  3. display:grid的基本使用、行和列的基本设置、间距、行列宽高

    w3school介绍的超级详细 跟着敲了一遍-- 浏览器兼容问题: 两边对齐可以选择宫格化布局. <!DOCTYPE html> <html> <head> < ...

  4. ios 代码设置控件宽高比_#iOS 开发实用技巧# Masonry 控件宽高(不同控件之间宽高比)比设置方法...

    Masonry 项目中我们实用 Masonry 自动布局,可能需要设置控件的宽高比,需要记录一下这个方法. 一句代码搞定: 注意这里需要设置的是控件的宽高比. make.width.equalTo(s ...

  5. 关于Android获取屏幕宽高、dp、sp、px之间的转化

    开发过程中,动态创建布局,或者自定义view,少不了需要获取屏幕宽高,这里的宽高指手机屏幕的分辨率,单位是px,而我们在布局文件中用到的空间宽高单位是dp,字体用的是sp. 这几个计量单位之间,是有关 ...

  6. 用v-for循环动态定位坐标显示元素,并遍历元素的left和top坐标位置(只需要用到元素的宽高、索引、每行显示数量)

    v-for="(index,$i) in total" :key="$i":style="{left:`${itemWidth*((index-1)% ...

  7. java设计一个立方体类box_实例1: 设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计算并输出立方体的体积和表面积。_学小易找答案...

    [填空题]表达式 list(filter(lambda x:x>2, [0,1,2,3,0,0])) 的值为 _________ . [填空题]表达式 len(' 中国 '.encode('ut ...

  8. 高德 android 多边形中心点,完美起航-android高德地图画多边形,已知中心点宽高画矩形,实际距离千米转地图坐标距离...

    项目中用到mapabc 绘制矩形区域.客户只能手动选择中心点,并填写区域的宽和高,切单位为km.要求实时显示规划区域. 记录笔记. 第一步找到地图绘制多边形api polygon = map.addP ...

  9. android高德地图绘制多边形_android 高德地图画多边形,已知中心点 宽高画矩形 ,实际距离 千米转地图坐标距离...

    项目中用到mapabc 绘制矩形区域.客户只能手动选择中心点,并填写区域的宽和高,切单位为km.要求实时显示规划区域. 记录笔记. 第一步找到地图绘制多边形api polygon = map.addP ...

最新文章

  1. java程序编写九九乘法表_用面向对象的方法编写的九九乘法表java代码的编写
  2. 带指针C语言代码,C语言指针(示例代码)
  3. KEIL5 编译器导致的程序异常
  4. Linux守护进程列表
  5. linux里的run-level,linux run level 为何物
  6. 前端基础-html-表格的基本标签和相关属性
  7. c语言python零基础教学_编程零基础应当如何开始学习 Python?
  8. 持续集成工具集之三 Jenkins配置
  9. JavaScript 多级联动浮动菜单
  10. 解决了一个堆破坏问题
  11. 假如我们等不到对的人,就趁孤单让自己优秀起来。单身是最好的升值期
  12. spark多字段排序与取topN
  13. Java基础-控制流程-3. 确定循环
  14. 中国建筑抗震设计规范反应谱v2.0(2012a)运行环境
  15. 12306排队是什么意思_12306抢票显示排队中怎么办
  16. Java基础语法面试题汇总
  17. 不知道PDF转Word用什么软件?试试这3款实用软件
  18. C语言运行时检查失败#2 周围的堆栈已损坏。
  19. 西安电子科技计算机学院导师,西安电子科技大学计算机学院研究生导师简介-李金库...
  20. zookeeper的羊群效应

热门文章

  1. IT专业学生社团指导心得
  2. English--并列句
  3. AdAware 6.0-强烈建议
  4. 东哥学Node的故事——内存管理
  5. 学校门口保安啃完这份524页“Java中高级学习笔记”都能拿13k了,你还不行动起来?
  6. 算法----删点成林
  7. PTA 7-4 输入半径(大于0),计算圆面积-math库
  8. Ant-design-vue中table表格序号连续递增问题
  9. PMI-ACP 考试术语表——第一部分
  10. 最新2021软件测试经典面试题,你能答多少?