码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-05-07 04:54:58      阅读:549      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   ext   get   

OpenCV坐标点与MATLAB中矩阵行与列的对应
Last Edit 2014/5/4
转载请注明出处:http://blog.csdn.net/jxlijunhao
之所以会写这个东西,因为要把OpenCV中得到的角点坐标,保存在txt文件中,然后投影到matlab中。
首先,OpenCV中的坐标系如下图:
bubuko.com,布布扣
所以,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]);	

bubuko.com,布布扣

在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表示行。
bubuko.com,布布扣bubuko.com,布布扣

另外一个问题是:在绘图时,OpenCV是从左上角的,而像plot ,scatter等都是以笛卡尔坐标系。
个人理解时,会根据实际的情况,来调整的。比如当要在图片中描绘一些特定的点时,plot scatter会自动地
选择这个图片的x,y轴的。
bubuko.com,布布扣

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

MATLAB基本操作(十):关于OpenCV坐标系与MATLAB中矩阵行与列的对应,布布扣,bubuko.com

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

标签:style   blog   class   code   ext   get   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!