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=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表示行。
另外一个问题是:在绘图时,OpenCV是从左上角的,而像plot ,scatter等都是以笛卡尔坐标系。
个人理解时,会根据实际的情况,来调整的。比如当要在图片中描绘一些特定的点时,plot scatter会自动地
选择这个图片的x,y轴的。
转载请注明出处:http://blog.csdn.net/jxlijunhao
MATLAB基本操作(十):关于OpenCV坐标系与MATLAB中矩阵行与列的对应,布布扣,bubuko.com
MATLAB基本操作(十):关于OpenCV坐标系与MATLAB中矩阵行与列的对应
原文:http://blog.csdn.net/jxlijunhao/article/details/25003381