rm记录(七)

首先感谢文末的分享,感谢!

今天要进行的任务就是角度的结算了,然后就是在上文我们已经得到了内置矩阵和畸变参数了。这样的话我们可以先根据它们矫正x和y的像素值,然后通过计算得到转角。

然后我们直接看看代码吧,也挺复杂的。又是那种结构,但是它的那个是驱动啊,我也没有呀,那我的不就简单了嘛,哈哈,那我还是找个图片试试,然后我将他的代码做了改变,这里还是先看main函数,

这里用到了这个东西:FileStorage 这个也是opencv里面的我也是第一次看见。

OpenCV 中的 FileStorage 类能够读写硬盘中的.xml.yaml文件,这里我们只讨论对 .xml 的以下几种操作:

  • 写入(FileStorage::WRITE,覆盖写)
  • 追加(FileStorage::APPEND,追加写)
  • 读取(FileStorage::WRITE

我们这里就用到了读取但是还是将那两个常用的过一遍吧!

filestorage是用FileNode来储存数据的:然后写入的时候有两种方法,先看代码:

FileStorage fs("data.xml", FileStorage::WRITE);
fs <<"map_node"<<"{";
for(size_t i = 0 ;i<10;i++}
{
    fs<<"node_"+to_string(i)<<i;
}
fs<<"}";
fs.release();

FileStorage fs("data.xml", FileStorage::WRITE);
fs <<"seq_node"<<"[";
for(size_t i = 0 ;i<10;i++}
{
    fs<<i;
}
fs<<"]";
fs.release();

然后这里面的size_t就是unsigned int的意思,第二种更简单,但是不能命名,而第一种可以命名,其实很简单,就是先建个对象,然后给参数,然后给出方法用括号表示开始和结束,然后写入数据

然后读取的话,我们直接我们这里的代码:

FileStorage fs("./1.xml,FileStorage::READ");
fs["camera_matrix"] >> cameraMatrix;
fs["distortion_coefficients"] >> distCoeffs;

这里的话就是我们要有xml文件,在上个文章中,我们只是得到了参数还没有变成xml文件,下面这个博客可以:https://www.cnblogs.com/kekeoutlook/p/13507730.html

img = imread("/home/dji/图片/rm/装甲板1.png");
namedWindow("img");
setMouseCallback("img", on_mouse,&img);

读取图片,然后用滑动条,先建立个回调函数:(现在这里是鼠标点击得到坐标,后期的话就是直接用装甲板识别返回的坐标)

等一下,我的指针真的太差了,看不懂啊,突击一波去。然后就是简单的过了一遍,然后看看这个代码的指针(回调函数)!

这个回调函数也很简单,主要就是有个switch语句,然后对鼠标的三种情况做出反应,然后这里有个calAngle函数才是最重要的哦,这里的一些参数都是cv里的。这个就不多说了。

void on_mouse(int event,int x,int y, int flags,void *ustc)
//event鼠标事件代号,x,y鼠标坐标,flags拖拽和键盘操作的代号
{
    Mat &img = *(Mat *) ustc;
    char temp[16];
    switch(event){
        case CV_EVENT_LBUTTONDOWN://按下左键
        {
            cout<<temp<<x<<","<<y<<endl;
            putText(img,temp,Point(x,y),FONT_HERSHEY_COMPLEX,0.5,Scalar(0,0,0,255));
            drawRect = true;
            calAngle
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值