opencv vector matlab,MATLAB基本操作(十):关于OpenCV坐标系与MATLAB中矩阵行与列的对应...

OpenCV坐标点与MATLAB中矩阵行与列的对应

Last Edit 2014/5/4

转载请注明出处:http://blog.csdn.net/jxlijunhao

之所以会写这个东西,因为要把OpenCV中得到的角点坐标,保存在txt文件中,然后投影到matlab中。

首先,OpenCV中的坐标系如下图:

714357e2eaebad2fb9d355b706e5f0c5.png

所以,OpenCV中以(0,0)为原点,假定一个点(10,2),表示y=10,x=2

在matlab中以  (1,1)为原点,所以上面的点在matlab中应为(11,3)

验证代码:

在openCV中:

IplImage *img = cvLoadImage("D:\\07Personal files\\headpicture.jpg");

CvScalar pixel;

CvScalar s;

s=cvGet2D(img,10,2);

printf("B=%f,G=%f,R=%f/t", s.val[0], s.val[1], s.val[2]);

f0e4c485ce6b015b0ab5ebdc483c82f0.png

在MATLAB中,导入同一张图片:

>> I=imread(‘headpicture.jpg‘);

>> R=I(:,:,1);

>> G=I(:,:,2);

>> B=I(:,:,3);

>> R(11,3)

ans =

31

>> G(11,3)

ans =

27

>> B(11,3)

ans =

28

好了,好像没有什么太大的问题,只是相差一1的问题而已。

下面看一个具体的问题,

vector corners;

...

FILE* fp = fopen(str, "wt");

Point2f data;

for (int i=0;i

{

data=corners1.at(i);

fprintf(fp, "%f%f\n", data.x,data.y);

}

fclose(fp);上面的的代码实现的是将一个角点的坐标保存到路径下的txt文档中。这个时候疑问就产生了,data.x data.y怎么去对应matlab的行与列了。

这个点在openCV中应该是(data.y,data.x)

在matlab中应该是            (data.y+1,data.x+1)

所以,我们得到的坐标点是可以直接+1,直接用在matlab中,data.x表示列,data.y表示行。

055efa0d586bf1489a9b2537c3439517.png

afb4782d9eb49e210c1279657d0bfa78.png

另外一个问题是:在绘图时,OpenCV是从左上角的,而像plot ,scatter等都是以笛卡尔坐标系。

个人理解时,会根据实际的情况,来调整的。比如当要在图片中描绘一些特定的点时,plot scatter会自动地

选择这个图片的x,y轴的。

819ab39220d30610c0bcd37b036cdbcf.png

转载请注明出处:http://blog.csdn.net/jxlijunhao

原文:http://blog.csdn.net/jxlijunhao/article/details/25003381

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值