首页 > 代码库 > MATLAB基本操作(十):关于OpenCV坐标系与MATLAB中矩阵行与列的对应
MATLAB基本操作(十):关于OpenCV坐标系与MATLAB中矩阵行与列的对应
OpenCV坐标点与MATLAB中矩阵行与列的对应
Last Edit 2014/5/4
转载请注明出处:http://blog.csdn.net/jxlijunhao
之所以会写这个东西,因为要把OpenCV中得到的角点坐标,保存在txt文件中,然后投影到matlab中。
首先,OpenCV中的坐标系如下图:
所以,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]);
在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<Point2f> corners;
...
FILE* fp = fopen(str, "wt");
Point2f data;
for (int i=0;i<corners1.size();i++)
{
data=http://www.mamicode.com/corners1.at(i); >
上面的的代码实现的是将一个角点的坐标保存到路径下的txt文档中。这个时候疑问就产生了,data.x data.y怎么去对应matlab的行与列了。
这个点在openCV中应该是(data.y,data.x)
在matlab中应该是 (data.y+1,data.x+1)
所以,我们得到的坐标点是可以直接+1,直接用在matlab中,data.x表示列,data.y表示行。
另外一个问题是:在绘图时,OpenCV是从左上角的,而像plot ,scatter等都是以笛卡尔坐标系。
个人理解时,会根据实际的情况,来调整的。比如当要在图片中描绘一些特定的点时,plot scatter会自动地
选择这个图片的x,y轴的。
转载请注明出处:http://blog.csdn.net/jxlijunhao
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。