OpenCV实践之路——像素初探
2016-02-21 18:06
183 查看
安装ImageWatch之后,对于图片每一个点的像素值一目了然。由于之前对于像素点的操作老是出现各种问题,比如上次想要实现矩形图片的对角线切割就是一直没能成功。今天借助IamgeWatch正好探究下Mat数据结构中像素到底是怎么访问的。
我用了一种比较直观的方式来访问像素。即利用at函数:
分别提取(2,3)、(3,2)和Point(2,3)、Point(3,2)的像素值。同时分别提取了三通道的BGR值。
结果如下:
可以看到Point(3,2)和(2,3)的像素值相同,Point(2,3)和(3,2)的值相同。从右边的ImageWatch可以看出Point(2,3)才是符合我们常规思维的坐标点。(其实点是(0,0))。
所以image.at<Vec3b>(Point(x,y)) = image.at<Vec3b>(y,x) 。
继续往下看:
等等!BGR三通道分别是1,A,k是什么鬼?说好的[ 49,65,107]呢?搜索下Opencv的官方教程文档,发现下面这句话:
发现Vec3b原来是uchar类型数据,上网找了个ASCII码对照表一对比,果然【1,A,k】就对应着【49,65,107】。
但是如果像素值大于127的话,这种方式就不能输出像素值了,考虑到这只喵星人身上白色部分的像素值大于127,于是提取(400,300)点的像素值,果然什么也没有显示出来。
把他们转换成int型呢
结果就真的可以了:
经过这一番探索,终于对像素的操作有了更深入的理解。上次没有完成的矩形对角线分割现在顿时觉得有了清晰的思路,那就是下一篇文章的内容了。
我用了一种比较直观的方式来访问像素。即利用at函数:
cout << " image.at<Vec3b>(Point(3,2)) = " << image.at<Vec3b>(Point(3, 2)) << endl << " image.at<Vec3b>(Point(2,3)) = " << image.at<Vec3b>(Point(2, 3)) << endl << " image.at<Vec3b>(3,2) = " << image.at<Vec3b>(3, 2) << endl << " image.at<Vec3b>(2,3) = " << image.at<Vec3b>(2, 3) << endl << " image.at<Vec3b>(2,3)[0] = " << image.at<Vec3b>(2, 3)[0] << endl << " image.at<Vec3b>(2,3)[1] = " << image.at<Vec3b>(2, 3)[1] << endl << " image.at<Vec3b>(2,3)[2] = " << image.at<Vec3b>(2, 3)[2] << endl
分别提取(2,3)、(3,2)和Point(2,3)、Point(3,2)的像素值。同时分别提取了三通道的BGR值。
结果如下:
可以看到Point(3,2)和(2,3)的像素值相同,Point(2,3)和(3,2)的值相同。从右边的ImageWatch可以看出Point(2,3)才是符合我们常规思维的坐标点。(其实点是(0,0))。
所以image.at<Vec3b>(Point(x,y)) = image.at<Vec3b>(y,x) 。
继续往下看:
等等!BGR三通道分别是1,A,k是什么鬼?说好的[ 49,65,107]呢?搜索下Opencv的官方教程文档,发现下面这句话:
发现Vec3b原来是uchar类型数据,上网找了个ASCII码对照表一对比,果然【1,A,k】就对应着【49,65,107】。
但是如果像素值大于127的话,这种方式就不能输出像素值了,考虑到这只喵星人身上白色部分的像素值大于127,于是提取(400,300)点的像素值,果然什么也没有显示出来。
把他们转换成int型呢
<< " (int) image.at<Vec3b>(2,3)[0] = " << (int)image.at<Vec3b>(2, 3)[0] << endl << " (int) image.at<Vec3b>(2,3)[1] = " << (int)image.at<Vec3b>(2, 3)[1] << endl << " (int) image.at<Vec3b>(2,3)[2] = " << (int)image.at<Vec3b>(2, 3)[2] << endl
结果就真的可以了:
经过这一番探索,终于对像素的操作有了更深入的理解。上次没有完成的矩形对角线分割现在顿时觉得有了清晰的思路,那就是下一篇文章的内容了。
相关文章推荐
- 使用HYPER-V搭建linux虚拟机
- Linux apt命令
- linux 下常见的文件内字符串替换命令
- linux内核装载vfs过程
- linux 环境下Apache+PHP+Mysql 源码安装
- Apache shiro 笔记整理之HelloWorld
- Linux学习笔记(持续更新)
- openstack常用命令
- Linux下串口通信详解(上)打开串口和串口初始化详解
- POJ 2115 C Looooops 扩展gcd的应用 及其 gcd exgcd的讲解
- 第五项修炼与架构师感想
- ubuntu 添加开机启动项
- CentOS7下Firewall防火墙配置用法详解
- linux常用命令2--权限管理命令
- 大型网站技术架构读书笔记03—大型网站架构核心要素
- Linux 常用命令集合
- CentOS 7 上systemctl 的用法
- linux下定时重启tomcat
- 解决redhat linux下IP地址可以ping通,域名无法ping通
- Linux 之 awk 命令