实验基础

  本次实验通过一个简短的例子,主要来说明下面4个问题:

  1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线;Y轴为图像矩形左边的那条垂直线。该坐标体系在诸如结构体Mat,Rect,Point中都是适用的。(OpenCV中有些数据结构的坐标原点是在图片的左下角,可以设置的)。

  2. 在使用image.at<TP>(x1, x2)来访问图像中点的值的时候,x1并不是图片中对应点的x轴坐标,而是图片中对应点的y坐标。因此其访问的结果其实是访问image图像中的Point(x2, x1)点,即与image.at<TP>(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维向量。

  4. 多通道图像在使用minMaxLoc()函数是不能给出其最大最小值坐标的,因为每个像素点其实有多个坐标,所以是不会给出的。因此在编程时,这2个位置应该给NULL。

实验代码及注释

main.cpp:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>using namespace std;
using namespace cv;int main()
{Mat image, image_3c;image.create(Size(256, 256), CV_8UC1);image_3c.create(Size(256, 256), CV_8UC3);   //3通道的图像image.setTo(0);image_3c.setTo(0);image.at<uchar>(10, 200) = 255; //使用at函数的地方,用的是10,200Point point(20, 100);image.at<uchar>(point) = 250;//使用at函数的地方,用的是Point(10,200)image_3c.at<uchar>(10, 300) = 255;image_3c.at<uchar>(10, 302) = 254;Point point_3c(20, 200);image_3c.at<uchar>(point_3c) = 250;double maxVal = 0; //最大值一定要赋初值,否则运行时会报错Point maxLoc;minMaxLoc(image, NULL, &maxVal, NULL, &maxLoc);cout << "单通道图像最大值: " << maxVal << endl;double min_3c, max_3c;//注意多通道在使用minMaxLoc()函数是不能给出其最大最小值坐标的,因为每个像素点其实有多个坐标,所以是不会给出的minMaxLoc(image_3c, &min_3c, &max_3c, NULL, NULL);cout << "3通道图像最大值: " << max_3c << endl;imshow("image", image);imshow("image_3c", image_3c);waitKey(0);return 0;
}

实验结果:

  单通道图像的输出结果如下所示:

  

  由上图可以看出,黑色的图像中有2个白色的点(读者可以仔细看下,由于只有1个像素点,所以需要自己找下,呵呵)的位置是不同的,因此可以证明Mat::at(x,y)和Mat::at(Point(x, y))是有区别的。

  3通道图像的输出结果如下所示:

  

  由上图可以看出,3通道的图像也是有2个点的,但是程序中在使用Mat::at(x, y)其y的值为300和302,这已经超出了图像的宽度256。这同时证明了实验基础中的第3点。

  后台输出结果如下:

  

  实验总结:由此可见,平时一定要注意一些细节上的东西。

0

OpenCV坐标体系的初步认识相关推荐

  1. Opencv 坐标体系

    opencv中表示一个像素的方式有好几种, 而且和矩阵用行列表示的方法还不太一致, 所以做了个测试, 备注一下. cv::Mat img(100, 200, CV_64F); cv::circle(i ...

  2. 2.cocos2d-x坐标体系(UI坐标系,GL坐标系,本地坐标,世界坐标,节点坐标)

     openGL & UI坐标体系 OpenGL坐标系:该坐标原点在屏幕左下角,x轴向右,y轴向上.这也就是cocos2dx中用到的坐标系. 屏幕坐标系:该坐标系的原点在屏幕左上角,x轴向右 ...

  3. 解剖学坐标体系(LPS , RAS和LAS)

    对医学图像处理技术来说,最重要的坐标体系是解剖学空间坐标体系.这个坐标体系由三个位面组成,用来描述标准的人体在解剖学上的位置.在解剖学坐标系中,单位基本都是mm. 由上图知,RAS是右手坐标系,LAS ...

  4. 医学图像——医学坐标体系

    转自 作者:豚大叔的小屋 链接:https://www.jianshu.com/p/b8fe11a33319 仅作为个人学习记录 1.医学坐标体系介绍 医学图像处理的一个难题是坐标体系的不一致.当前, ...

  5. Java-Java绘图坐标体系

    坐标体系介绍 坐标原点位于左上角,以像素为单位.在java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素:第二个是y坐标,表示当前位置为垂直防线,距离坐标原点y个像素. 像素介 ...

  6. 计算机学科课程知识体系回顾初步

    halo~我是bay_Tong桐小白 本文内容是桐小白个人对所学知识进行的总结和分享,知识点会不定期进行编辑更新和完善,了解最近更新内容可参看更新日志,欢迎各位大神留言.指点 计算机学科课程知识体系回 ...

  7. 详解Spire.PDF中的坐标体系及应用

    Spire.PDF是一款专业的基于.NET平台的PDF组件.它能够让开发人员在不使用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序创建,阅读,编写和操纵PDF 文档.文本将详 ...

  8. 理解Unity3D中的四种坐标体系

    coffeecato写在前面:本文比较了unity3d中的四种坐标系,在使用unity3d开发的过程中,已经多次被坐标转换之类的问题卡住,这篇文章可以说是系统的对四种坐标系进行了总结,结合实际的使用经 ...

  9. DICOM笔记-医学图像读取涉及到的医学坐标体系

    DICOM定义   医疗数位影像传输协定(DICOM,DigitalImaging andCommunications inMedicine)是一组通用的标准协定,在对于医学影像的处理.储存.打印.传 ...

最新文章

  1. 安装两个硬盘时应如何跳线?
  2. 将一个数组中不重复_50. 数组中重复的数字
  3. JS中this的四种用法
  4. 关于网站主页的界面设计不同风格的探索
  5. 安卓资源字串中加全角空格、半角空格、换行、@%等特殊字符
  6. linux机器crt连接不上,SecureCRT连不上Linux主机了,求破
  7. Docker 配置镜像加速器
  8. cad快看_星期日来啦!分享5个珍藏已久的电影网站,各种大片免费看
  9. php+laravel 扫码二维码签到
  10. 摄影中快门、光圈、ISO之间的关系
  11. [机械键盘]Filco87 奶酪绿 FKBN87MRL/ECW2 开箱
  12. 唐太宗管理之道:收人,收心,收天下
  13. 美国白宫将探讨人工智能 概念股分析
  14. 用Python海归作图--turtle,画椭圆
  15. wow转服务器微信支付,魔兽打团本成就,打到一半,发微信支付宝要钱,真国服之耻!...
  16. mbio期刊拒稿率_PLoS Pathogens
  17. 快速查找论文的源代码网站资料
  18. Ubuntu server 18.04 服务器配置
  19. 前端开发常见的英语词汇
  20. 最新版谷歌浏览器的锚点小问题 用jquery做出ctrl+f的搜索效果

热门文章

  1. 上架相关——appstore 更新app版本
  2. zookeeper watch笔记
  3. transform、transition 动画效果
  4. web worker原理 SSE原理
  5. 一篇需要膜拜的文篇--Javascript异步编程模型进化(转)
  6. 原来fb可以在一个工程里面输出多个swf模块
  7. 总结了下自己的几个典型行为
  8. js中的时间与毫秒数互相转换
  9. ES5-8 闭包高级、对象、构造函数、实例化
  10. Vue项目代码改进(五)—— 将侧边栏菜单改造为动态后,如何按需显示不同图标