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. js里的匿名函数 数组排序
  2. 使用PyTorch进行情侣幸福度测试指南
  3. 面试常考题---交换变量
  4. 超级签名源码_企业签名和超级签名有哪些区别?
  5. python pptx怎么复制ppt_python pptx复制ppt中的某一页并且放在这一页之后
  6. 如何应对内网安全的那些新挑战——威胁不断,防御不止
  7. python 常用内置函数
  8. u盘在磁盘管理可以显示 但是电脑中找不到_关于U盘你不知道的一些知识
  9. 图像形态学变换 膨胀和腐蚀 开闭运算 边缘检测 opencv实现
  10. BigDecimal数据加法返回值接收
  11. 树上10只鸟,开枪打死1只,还剩几只?
  12. Android TV上 WebView播放视屏与TV自带画中画不兼容处理及分析
  13. SaaS vs 低代码,谁在成为中国产业服务的楔子?
  14. JSP教程|1小时玩转JSP网站开发技术
  15. excel按某个值进行筛选后,将筛选出来的行进行排序
  16. Linux常用命令——screen命令
  17. python数据分析师 前景_数据分析师的前景怎么样? 本人是程序员,最近对数据分析有兴趣……...
  18. ps中常用模糊的区别
  19. 大坑:c++如何输入带空格的字符串?
  20. MySql 别犯糊涂了! LEFT JOIN 的 ON 后接上筛选条件,多个条件会出事!

热门文章

  1. 阿里云 云开发平台使用体验
  2. 鸿蒙os下载到电脑上,华为鸿蒙电脑系统最新下载
  3. 数字图像处理练习题整理 (一)
  4. 上传文件服务器怎么做,图片上传到服务器后怎么生成可直接访问的链接
  5. 不重启Linux系统重新扫描新增磁盘
  6. 南航计算机学硕录取情况,南航公布研究生录取名单,一考生英语一考了99分,网友:离谱!...
  7. mac idea 创建 springboot 项目
  8. 介于友情与爱情之间的情感
  9. 我们的------,大于友情,小于爱情
  10. 百无聊赖之JavaEE从入门到放弃(五)this的本质_对象创建过程的4 步_隐式参数 static