opencv的坐标原点

本来在学习实践另一片文章的时候,不知道opencv的坐标原点在哪里,但是通过猜测原来文章的注释发现,那篇文章所用的坐标原点的应该是在窗口的左上角,有了猜测就需要证明了。于是搜肠刮肚的有了下面的测试代码。
很简单,就是画一个空的窗口,然后准备在上面指定不同的点point来证明坐标原点是在坐上角。

下面的代码是先创建一个窗口;

import numpy as np
import cv2

win1=np.zeros([100,300,3],np.uint8)
win1[:]=(0,0,255)
#cv2.namedWindow("windows-1")
print(win1)
cv2.imshow("win-1",win1)
cv2.waitKey(0)

创建的结果如下图:
这里写图片描述
流程很简单,就是创建一个3维数组,然后给每个元素都赋值为255,然后把这个数组给cv2.imshow()传过去就行了。这个3维的数组分别表示RGB3个分量的值,在给数组赋值的时候把RGB中的R赋值为255。此处注意:opencv中的RGB顺序和我们常用的顺序是相反的,也就是opencv中把R分量的值放在memory的最后。

解下来在窗口中随便位置指定一个点就行了,主要是看看x和y是的原点是哪里。
上面的line33首先使用zero创建了一个100*300的矩阵。
win1这是一个100行x300列的矩阵。什么意思呢?这是矩阵的命名方法。就是它有100个像素高(100行嘛),300个像素长(300列嘛)。也就是如果用横轴x表示长的话,它的长度是300,可以在300内取值。用纵轴y表示高的话,它的高度是100,可以在100内取值。这里有一个地方需要注意一下,就是100*300中的100并不是对应这个点坐标(x,y)中的x,而是对应着y;300是对应着x的。为什么会强调这点呢?下面会用到:)
最后,line38创建的win1的矩阵是这样的:

[[[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  ..., 
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  ..., 
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  ..., 
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 ..., 
 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  ..., 
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  ..., 
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  ..., 
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]]

上面是line36的输出结果。系统自动加了很多的省略号,算了,我换一下参数,重新输出,主要是看zeros的用法:

win1=np.zeros([10,30,3],np.uint8)
win1[:]=(0,0,255)

win1[5,0]=(255,255,0)
#cv2.namedWindow("windows-1")
print(win1)
cv2.imshow("win-1",win1)
cv2.waitKey(0)
[[[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[255 255   0]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]

 [[  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]
  [  0   0 255]]]

可以看到,输出的结果有10段,每段有30个元素,这其实就对应着10行30列。每个元素都是一个1维的数组,有3个数据,传给后面的namedwindow()后分别代表BGR三分色。注意Opencv的三分色是按照BGR排列的。
解下来是win[:]=(0,0,255) 是把win1这个数组从头到尾的都用(0,0,255)来初始化赋值,也就是每个像素都是红色。这是python中的数组的用法。

接下来的win[5,0]=(255,255,0)是把第5行,第0列对应的元素的值设置为(255,255,0)
效果如下图:
这里写图片描述
这个太小了,我放大一点。
这里写图片描述

再换个其他的点:
这里写图片描述
这次使用了100*300的矩阵,修改了第0行,第100列的那个点为白色(255,255,255),仔细看,在第0行的100列(约1/3处)有个白点,就是小了点儿。
所以,猜测的坐标原点是在左上角是对的。x轴是从原点水平向右正向增大,y轴是从原点竖直向下正向增大。

=======
补充,查到资料说还可以根据originde 的值 IPL_ORIGIN_TL和IPL_ORIGIN_BL来判断原点的位置,但问题是,我不知道怎么用python获取到IplImage这个对象,后来又了解到OpenCV的python-API中没有IplImage这个类型,那就不能用这个方法了。待续吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值