首页 > 代码库 > 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