Opencv坐标系X、Y行列宽高之间的关系
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 高
的区域。
补充(详细解释)
坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线;Y轴为图像矩形左边的那条垂直线。该坐标体系在诸如结构体Mat,Rect,Point中都是适用的。(虽然网上有学着说OpenCV中有些数据结构的坐标原点是在图片的左下角,但是我暂时还没碰到过)。
在使用image.at(x1, x2)来访问图像中点的值的时候,x1并不是图片中对应点的x轴坐标,而是图片中对应点的y坐标。因此其访问的结果其实是访问image图像中的Point(x2, x1)点,即与image.at(Point(x2, x1))效果相同。
如果所画图像是多通道的,比如说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行列宽高之间的关系相关推荐
- OpenCV图像坐标系与行列宽高的关系
这篇文章挺好 OpenCV图像坐标系与行列宽高的关系 图片坐标系,与从小到大见到的xy坐标系,x轴方向相同,只是y轴方向相反.
- 【openpyxl】设置样式(字体样式、行列宽高、对齐方式、边框、填充和渐变)
1.字体样式 from openpyxl import Workbook from openpyxl.styles import Fontwb = Workbook() ws = wb.active# ...
- display:grid的基本使用、行和列的基本设置、间距、行列宽高
w3school介绍的超级详细 跟着敲了一遍-- 浏览器兼容问题: 两边对齐可以选择宫格化布局. <!DOCTYPE html> <html> <head> < ...
- ios 代码设置控件宽高比_#iOS 开发实用技巧# Masonry 控件宽高(不同控件之间宽高比)比设置方法...
Masonry 项目中我们实用 Masonry 自动布局,可能需要设置控件的宽高比,需要记录一下这个方法. 一句代码搞定: 注意这里需要设置的是控件的宽高比. make.width.equalTo(s ...
- 关于Android获取屏幕宽高、dp、sp、px之间的转化
开发过程中,动态创建布局,或者自定义view,少不了需要获取屏幕宽高,这里的宽高指手机屏幕的分辨率,单位是px,而我们在布局文件中用到的空间宽高单位是dp,字体用的是sp. 这几个计量单位之间,是有关 ...
- 用v-for循环动态定位坐标显示元素,并遍历元素的left和top坐标位置(只需要用到元素的宽高、索引、每行显示数量)
v-for="(index,$i) in total" :key="$i":style="{left:`${itemWidth*((index-1)% ...
- java设计一个立方体类box_实例1: 设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计算并输出立方体的体积和表面积。_学小易找答案...
[填空题]表达式 list(filter(lambda x:x>2, [0,1,2,3,0,0])) 的值为 _________ . [填空题]表达式 len(' 中国 '.encode('ut ...
- 高德 android 多边形中心点,完美起航-android高德地图画多边形,已知中心点宽高画矩形,实际距离千米转地图坐标距离...
项目中用到mapabc 绘制矩形区域.客户只能手动选择中心点,并填写区域的宽和高,切单位为km.要求实时显示规划区域. 记录笔记. 第一步找到地图绘制多边形api polygon = map.addP ...
- android高德地图绘制多边形_android 高德地图画多边形,已知中心点 宽高画矩形 ,实际距离 千米转地图坐标距离...
项目中用到mapabc 绘制矩形区域.客户只能手动选择中心点,并填写区域的宽和高,切单位为km.要求实时显示规划区域. 记录笔记. 第一步找到地图绘制多边形api polygon = map.addP ...
最新文章
- java程序编写九九乘法表_用面向对象的方法编写的九九乘法表java代码的编写
- 带指针C语言代码,C语言指针(示例代码)
- KEIL5 编译器导致的程序异常
- Linux守护进程列表
- linux里的run-level,linux run level 为何物
- 前端基础-html-表格的基本标签和相关属性
- c语言python零基础教学_编程零基础应当如何开始学习 Python?
- 持续集成工具集之三 Jenkins配置
- JavaScript 多级联动浮动菜单
- 解决了一个堆破坏问题
- 假如我们等不到对的人,就趁孤单让自己优秀起来。单身是最好的升值期
- spark多字段排序与取topN
- Java基础-控制流程-3. 确定循环
- 中国建筑抗震设计规范反应谱v2.0(2012a)运行环境
- 12306排队是什么意思_12306抢票显示排队中怎么办
- Java基础语法面试题汇总
- 不知道PDF转Word用什么软件?试试这3款实用软件
- C语言运行时检查失败#2 周围的堆栈已损坏。
- 西安电子科技计算机学院导师,西安电子科技大学计算机学院研究生导师简介-李金库...
- zookeeper的羊群效应