精华内容
下载资源
问答
  • 关于opencv通过initUndistortRectifyMap函数获取undistort后的对应点的方法

    关于opencv通过initUndistortRectifyMap函数获取undistort后的对应点的方法

    环境与简介

    我用的是opencv2.4.13.2,然后是c++的。
    我已经成功获取了摄像机的内参矩阵,以及畸变矩阵。也已经成功畸变矫正。但是我还希望获取原图中心点undistort之后的对应点。

    前置代码

    这部分代码的作用是畸变矫正。实际上和题目关系不大,而且你们也很容易在网上找到(当然是有不少错误的版本)。不过我还是放上来:

        Mat cameraMatrix = Mat::eye(3, 3, CV_64F);
        //内参矩阵, 就算复制代码,也不要用我的参数。摄像头都不一样...
        cameraMatrix.at<double>(0, 0) = 2.075319928848340e+03;
        cameraMatrix.at<double>(0, 1) = 0;
        cameraMatrix.at<double>(0, 2) = 1.273350420020438e+03;
        cameraMatrix.at<double>(1, 1) = 2.073416138777327e+03;
        cameraMatrix.at<double>(1, 2) = 6.898818022397845e+02;
        //畸变参数,不要用我的参数~
        Mat distCoeffs = Mat::zeros(5, 1, CV_64F);
        distCoeffs.at<double>(0, 0) = 0.005961692158170;
        distCoeffs.at<double>(1, 0) = 0.014892085926656;
        distCoeffs.at<double>(2, 0) = -0.007714274148788;
        distCoeffs.at<double>(3, 0) = -0.010548832296675;
        distCoeffs.at<double>(4, 0) = 0;
        Mat view, rview, map1, map2;
        Size imageSize;
        imageSize = image.size();
        initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(),
    getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, 1, imageSize, 0),
                                imageSize, CV_16SC2, map1, map2);
        remap(image, image, map1, map2, INTER_LINEAR);

    那么,在remap函数之后,image就是我们畸变矫正的结果了。

    Attempt1:undistortPoints

    首先,我在网上一搜,这个函数就冒了出来。undistortPoints, 矫正后的点,emmmmmmm,看起来很美。从结果来说,实际上是坑爹的

    std::vector<Point2d> obj_corners(1);
    obj_corners[0] = Point2d((double)input_center_point.x,(double)input_center_point.y);
    std::vector<Point2d> scene_corners(1);
    //obj_corners:输入
    //scene_corners:输出
    undistortPoints(obj_corners,scene_corners,cameraMatrix,distCoeffs);

    结果怎么这么小?

    11-24 23:03:38.971 9133-9410/? I/MyCV: scene_corners width is 0.034107
    11-24 23:03:38.971 9133-9410/? I/MyCV: scene_corners height is 0.031944

    实际上,在得到结果之后,还要有一步:

    //Focus_length: 焦距,分fx和fy的。看不懂的同学请从头学习内参矩阵或者考虑换个导师或者科研题目
    //Principle_Point.x:主点坐标,也是内参矩阵的一部分,同上
    //scene_corners[0]: 上面undistortPoints函数的输出
    result_point.x = scene_corners[0].x*Focus_length.x+Principle_Point.x;
    result_point.y = scene_corners[0].y*Focus_length.y+Principle_Point.y;

    这样,就能够算出结果。
    我自己的输入是:(1344,756),而我的输出是:

    11-24 23:03:38.971 9133-9410/? I/MyCV: result width is 1344.132696
    11-24 23:03:38.971 9133-9410/? I/MyCV: result height is 756.114362

    根本没多大变化啊?!
    所以,就如我在开头说的,这个是坑爹的…它应该有其他作用,但是并不能解决我现在的问题。

    attempt2:initUndistortRectifyMap()的map

    然后我又查查找找,最终找到下面两个:
    https://stackoverflow.com/questions/34265650/can-i-get-the-point-position-using-remap-in-opencv
    https://stackoverflow.com/questions/22323410/opencvremap-how-to-remap-an-image-to-another-image-with-different-size
    它们都说的是什么呢?两个说了一件事:那就是通过initUndistortRectifyMap函数:

    initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(),
                                getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, 1, imageSize, 0),
                                imageSize, CV_16SC2, map1, map2);

    返回的map1,map2来直接获得undistort之后的对应点。
    于是我就试试试,这个怎么样?

    map1.at<float>(row,col)
    map2.at<float>(row,col)

    这个又怎么样?

    map1.at<uchar>(row,col)
    map2.at<uchar>(row,col)

    具体结果我忘了,但是都明显不对。原因是map1,和map2的格式早就由initUndistortRectifyMap函数决定了。仔细看看其中的参数,CV_16SC2定义了map1的格式。map2的type我打出来是:

    11-24 23:03:37.687 9133-9426/? I/MyCV: map2 16UC1

    于是我根据这里的type和mat格式的对应关系又试了这个:

    map1.at<int16_t>(row,col)
    map2.at<unit16_t>(row,col)

    结果还是不对。
    我又试了convertMaps函数,未果。
    之后,我看了眼map1的CV_16SC2格式,发现事情并不简单。map1啊,明明你只是一个mat,应该和你的好基友map2一起返回结果x坐标和y坐标,为嘛你有两个通道啊?
    于是我怀着侥幸心理,再试了两个通道分别的值:

    typedef Vec<int16_t, 2> Vec2myi;
    __android_log_print(ANDROID_LOG_INFO, LOG, "map1 %d",map1.at<Vec2myi>( y , x )[0]);
    __android_log_print(ANDROID_LOG_INFO, LOG, "map2 %d",map1.at<Vec2myi>( y , x )[1]);
    
    11-24 23:03:37.785 9133-9426/? I/MyCV: map1 1372
    11-24 23:03:37.785 9133-9426/? I/MyCV: map2 767

    大家还记不记得,我的输入是多少?
    (1344,756)对吧,已经和这个十分接近了。
    貌似是十分靠谱的。
    结果,我把点打在图上,还是差不少,究竟是哪里出错了呢?
    我输入的图片尺寸为:2688*1512
    我又看了看点的位置,灵机一动,决定这样:

    new_x = input_image.size().width - map1.at<Vec2myi>( y , x )[0];
    new_y = input_image.size().height - map1.at<Vec2myi>( y , x )[1];

    完美。
    别问我为什么坐标是反过来的,我什么也不知道。なにも知らない!
    PS: 当前搞计算机视觉的人,究竟有多少主要用的是tensorflow,caffe而非OpenCV?机器学习眼下的大热,真是能让我凭空生出很多没有营养的感慨。十年前的计算机视觉,和2012年之后的完全是两个学科嘛。SVM都没人用了。算了,没什么所谓。

    展开全文
  • 交换机:Cisco2960、Cisco G3560X 服务器:10.15.44.164 AC-*-2D-*-84-* PC:10.15.44.69 服务器44.164→port 2-Cisco2960-port...通过MAC、IP地址查询对应交换机端口 1.开始运行Nbtstat –a ip 查询出mac地址...

    交换机:Cisco2960、Cisco G3560X

    服务器:10.15.44.164 AC-*-2D-*-84-*

    PC:10.15.44.69

    服务器44.164→port 2-Cisco2960-port1→G3560X-port5

    通过IP地址查找这个IP在那台交换机的接口下

     

    通过MAC、IP地址查询对应交换机端口

    1.开始运行Nbtstat –a ip 查询出mac地址

    wKioL1bcv2eQDm6GAAAY8Id21zc609.png

    或者直接到G3560X交换机上通过show arp查找mac地址

    wKioL1bdFteQMsXLAAAOqXlHn4I361.png

    没发现对应关系是ARP信息超时了就被删除,ARP和MAC两张表的超时清理时间是不一样的,可以先到交换机上去ping下该IP地址在show arp

    2.登陆G3560x

    运行Switch#show mac address-table dynamic address AC-*-2D-*-84-*

    可以看到mac地址为AC-*-2D-*-84-*连接G3560X交换机的端口是port5

    wKiom1bcwEiyhtt7AAAiOYuh6w0678.png

    3. 根据GigabitEthernet0/5查询该接口对接的设备

    运行Switch#SHOw cdp neighbors gigabitEthernet 0/5

    显示更详细的信息:Switch#SHOw cdp neighbors gigabitEthernet 0/5 detail

    可以看到G0/5对接的设备是Cisco2960交换机的fas0/1端口

    wKioL1bcw6ngiMFOAAAop5ZNgmg919.png

    4.登陆Cisco2960,

    运行cisco2960-sh-10-4-4#show mac address-table dynamic address AC-*-2D-*-84-*

    可以看到mac地址为AC-*-2D-*-84-*连接C2960交换机的端口是port9

    wKioL1bcxe6DSkVDAAAjKII-sg4891.png

    5.确认该mac是否是这个端口唯一活动mac地址

    运行cisco2960-sh-10-4-4#show mac address-table dynamic interface gigabitEthernet 0/9

    只显示一条,表明10.15.44.164就是连接到C2960交换机的9口;若有多条结果表明C2960 port9下接的还有其他路由交换设备,重复以上步骤查找

    wKiom1bcxtaTC8YSAAAZmnAbjXk942.png

     

    通过交换机端口地址查询对应服务器IP

    上面通过IP查到了所连交换机对应的端口,下面通过交换机端口查询连接的是那台服务器,环境还是如上

    查看C3650X port11对应连接的是哪台服务器,步骤和上面类似,逆推

    1、查看C3650X port11查接口对接的设备mac地址

     

    运行Switch#show mac address-table dynamic interface gigabitEthernet 0/11

    wKioL1bc3GvSGrk3AAAXogc7-bE056.png

     

     

    1、通过mac地址查看对应IP

    运行show arp | include mac_address

    wKioL1bdF7bjyfugAAANVIzMq9E942.png

    ARP和MAC两张表的超时清理时间是不一样的。使用Switch#clear arp-cache 可以清除arp信息表,使用Switch#show interfaces gigabitEthernet 0/11可以查看arp刷新时间  ARP type: ARPA, ARP Timeout 04:00:00;没发现对应关系是ARP信息超时了就被删除,如何刷新arp表有知道的大神请指教!

    本文出自 “我本不是菜鸟” 博客,此出处http://pvbutler.blog.51cto.com/7662323/1748384

    展开全文
  • 这篇文章记录一下robotframe执行中出现No keyword with name的对应方法

    这篇文章记录一下robotframe执行中出现No keyword with name的对应方法

    现象

    错误提示信息:No keyword with name ‘Title Should Be’ found.

    sh-4.2# robot test.robot
    ==============================================================================
    Test                                                                          
    ==============================================================================
    Check something :: Check the page title                               | FAIL |
    No keyword with name 'Title Should Be' found.
    ------------------------------------------------------------------------------
    Test                                                                  | FAIL |
    1 critical test, 0 passed, 1 failed
    1 test total, 0 passed, 1 failed
    ==============================================================================
    Output:  /tmp/output.xml
    Log:     /tmp/log.html
    Report:  /tmp/report.html
    sh-4.2#

    原因&确认方式

    代码不用再贴了,因为这篇文章主要用来说明出现类似低级问题的确认内容和方法。

    可能原因1:没有导入对应的库

    robot的测试脚本中如果缺少关键字对应的库,自然会出错,唯一的一个例外就是BuildIn内置库可以不用写。因为此关键字在Selenium2Library中,所以需要检查脚本的Settings中是否有如下的内容

    Library                     Selenium2Library

    可能原因2:写错关键字名称

    这看起来虽然很像一个笑话,但是请仔细检查一下,如果你却是将Library导入了,但是又认不出来,看看是不是多个空格什么的,仔细,仔细,仔细。

    上面两种原因有可能有各种方式的变形,导致以为没有问题实际却有问题,那么长的英文关键字写错一点根本不好认,汉字的优势在这里显现的淋漓尽致,可以考虑使用汉字来写关键字可能会更加简练和有效率。

    可能原因3:其他原因

    从这个原因开始进入宿命论的角度,但是往往会存在,可能安装了多个版本,之间相互冲突,或者环境的问题,依赖的问题,网络的问题等。

    确认方式

    以下以Title Should Be关键字找不到为例,介绍一下如何进行问题定位。
    首先确认Title Should Be关键字在那个库中,会写robot的测试脚本,自然知道这是robot使用selenium库中所提供的关键字,用于确认打开的页面的title与输入的参数是否一致的关键字,相关的库名为Selenium2Library

    确认pip的package

    robot本身是使用python开发的,robotframework本身就是使用pip进行安装的,其他相关的package也是一样。
    因为Selenium2Library是以robotframework-selenium2library为载体的,首先看看此package是否进行了安装。

    ~ # pip show robotframework-selenium2library
    Name: robotframework-selenium2library
    Version: 3.0.0
    Summary: Web testing library for Robot Framework
    Home-page: https://github.com/robotframework/Selenium2Library
    Author: Tatu Aalto
    Author-email: aalto.tatu@gmail.com
    License: Apache License 2.0
    Location: /usr/lib/python2.7/site-packages
    Requires: robotframework-seleniumlibrary
    Required-by: 
    ~ # 

    确认安装的库

    python的库使用pip安装后,如果当前系统是python2.7的话,会被安装在如下目录:
    /usr/lib/python2.7/site-packages/xxxx,比如

    /usr/lib/python2.7/site-packages # ls
    README                                           robotframework-3.0.4-py2.7.egg-info
    Selenium2Library                                 robotframework_selenium2library-3.0.0.dist-info
    SeleniumLibrary                                  robotframework_seleniumlibrary-3.1.1.dist-info
    easy_install.py                                  selenium
    easy_install.pyc                                 selenium-3.14.0.dist-info
    pip                                              setuptools
    pip-18.0.dist-info                               setuptools-33.1.1.post20171031-py2.7.egg-info
    pkg_resources                                    urllib3
    robot                                            urllib3-1.23.dist-info
    /usr/lib/python2.7/site-packages # 

    确认此目录:

    • 是否存在
    • 名字是否与robot脚本中的引用名一致

    经过确认Selenium2Library确实存在,并且Selenium2Library的写法也与robot脚本一致。

    确认是否能够进行import

    在robot运行的OS上使用python确认是否能够正常import相关的库,比如此例中应该能够想如下这样正常import而不出error

    ~ # python
    Python 2.7.15 (default, Aug 22 2018, 13:24:18) 
    [GCC 6.4.0] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import Selenium2Library
    >>>

    这样基本上就能说明环境本身没有问题,剩下的就多多检查一下robot的脚本或者robot的版本即可。

    展开全文
  • 王小龙数学话题优秀回答者 数学,计算机视觉,图形图像处理 26 人赞同 ...题主说的是二维图片之间的单应变换吧。...一个单应矩阵是大小为3...注意由于它们都是齐次坐标,对应的图像上的两个分别是和。 二、单应
    转载:http://www.zhihu.com/question/23310855
    王小龙数学话题优秀回答者 数学,计算机视觉,图形图像处理
    庞阿困 别人笑我太疯癫,我夸他人看得准。
    展开全文
  • 对应的键 max(b,key=b.get) 对应的值 b[max(b,key=b.get)]
  • keil5中不到或没有对应的芯片怎么办?超详细!! 安装完Keil5之后,有的小伙伴们是不是会发现,为什么新建工程的时候不到自己想要的CUP型号,如下图: 这里就假设要的CUP型号是三星的S3C2440A,而我刚刚装好...
  • 以上两就是本地明明有对应的jar包,但项目中还是会报不到这个jar包的原因。 解决方法 1、直接干掉_remote.repositories这个文件; 2、配置你的项目,让你的项目能够连接到下载这个包的仓库(一般为私服
  • 用经纬度生成对应的坐标

    千次阅读 2018-07-03 13:19:44
    2012-05-29作者:jason 对于勘测数据,使用的测量工具为手持GPS的情况下,测量的位置往往是经纬度坐标,单位为度(°)分(′)秒(″),如72°32′56″,这些坐标对往往代表的是重要的设施,比如采矿、水源、...
  • 定义z=x**2+y**2,x,y的范围都是(-10,10),且为整数,要求出z的最小值极其对应的x,y值 从等式看出,z最小为0,x,y都等于0 def optimize(): #定义最优化函数 #建空列表收集x,y,z的值 z_list = [] x_list =...
  • 图像旋转及坐标对应

    千次阅读 2018-04-26 13:59:35
    //以新的临时图的中心为旋转 Point rotatepoint; rotatepoint.x = rotatepoint.y = diaLength / 2; Mat rotaMat = getRotationMatrix2D(rotatepoint, degree, 1);//获取二维旋转的仿射变换矩阵 warpAffine...
  • 同一目录下的 import 不到对应模块 在Python编写时,需要用到导入已创建好的模块,但可能会出现这种问题:没有识别到我要导入的模块。 运行的时候就会报错显示不到对应模块 (红框框圈起来的都是无法识别的) ...
  • AndroidStudio 3.6 中 R.layout 不到对应的xml文件

    千次阅读 热门讨论 2020-03-14 00:49:58
    在新版的AndroidStudio3.6 中,在项目的包下新建 activity 时,一般会同时生成对应的java和xml文件,例如新建 MainActivity ,则会在java包下生成 MainActivity.java ,在 res 文件夹下的layout文件中生成 activity_...
  • keil5.20l在使用时会遇到突然不到对应的flash算法的尴尬时刻, 这有可能是pack包不经意间遭到了损坏,如果是这种情况就简单了,你只需要将装好的PACK删掉,重新进入官网下载并装载一次就好了,但在特殊情况下,这...
  • anaconda python 版本对应关系

    万次阅读 多人点赞 2018-07-14 15:09:48
    但是如果你只是临时想用某个版本的python,或在下表中不到对应的,你大可以直接安装最新的anaconda,然后用conda create来创建虚拟环境即可,不用非得找到对应的anaconda来装。 最佳的策略是你的机器上只保留一...
  • 已有一张图片,找到里面需要的矩形。代码#include #include #include #include #include <opencv2/core/Core.hpp>
  • 在web.xml配置文件中路径没有错误,对应的jar包已经导入的时候 当配置文件不是在src下时,如图: 这时需要我们在选中项目右键-->Build Pate-->Configure Build Path,出现如下界面: ...
  • 由于UIPageControl中响应事件并没有像点击的locationindexpath的方法(tableView中是可以的:indexPathForRowAtPoint:CGpoint方法)因此我们在UIPageControl需要自己来实现这种类似方法。
  • PCL 查找对应点并可视化

    万次阅读 2021-02-27 13:03:32
    查找点云配准中的对应关系,并可视化。
  • import pandas as pd ...# 最小值和最小值所对应的位置 text.stack().min() Out[4]: 14 text.stack().idxmin() Out[5]: (2, 0) 转载于:https://blog.csdn.net/xiaotian127/article/details/85261655
  • 先来看错误提示截图: 我最初给项目加载图片的方法是:在drawable文件夹右击,然后选择New->file,界面如下: ... ...我加载的是最后一个,注意它前面的图标和其他三个的区别。...它们有两不同:1.Location值
  • 解压后根据不同系统版本中对应的DynCache.exe文件复制到C:\windows\system32中。  2. 以管理员身份打开命令提示符,执行如下命令添加服务:  sc create DynCache binPath= %SystemRoot%\System32\DynCache.exe ...
  • 扇区和文件对应关系

    千次阅读 2018-04-11 18:51:07
    查找对应关系 如果你通过内核得知扇区的位置,怎么有找到文件呢,下面就逐一介绍一下 1.扇区块 fdisk -lu /dev/ 设备名称 就可以知道扇区所在操作系统分区,并且可以知道分区的起始扇区 2....
  • Elasticsearch和SpringBoot版本对应

    万次阅读 2020-04-12 11:16:49
    Elasticsearch和SpringBoot之间版本关系要适配,否则springboot不到elasticsearch的节点:主要注意以下几; 低版本换高版本的Elasticsearch报错。 1:查看项目中自己的springboot版本2.2.6 2: 查看Spring date ...
  • 对不起了哥们,强行转载: 存在的问题是这样的: 解决方案:
  • 利用FormView的FindControl查找控件引用的时候,有时候出现不到控件的情况。原因:主要根FormView控件的运行机制有关。FormView的DefaultMode和CurrentMode属性决定其当前运行的模版是哪个,同时相应调用相关的sql...
  • Principal.getId()拿到的用户id,默认是从Credential.getId()拷贝过来的,Principal实例主要是来自DefaultPrincipalFactory DefaultPrincipalFactory.createPrincipal(final String id) 我们看一下...
  • 运行时使用鼠标左键图像上任意点,即可显示该rgb图像各通道的值及该图像对应的灰度图象的灰度值 //PixelValueMonitor.h #include "cv.h" #include "highgui.h" class PixelValueMonitor{ public: ...
  • 9、spss做交叉表检验和对应分析

    千次阅读 2015-04-15 15:35:34
    然后在打开统计量,勾选对应表,行概览,列概览,列轮廓表。绘制对话框勾选双标图。然后就可以得到结果了。 对应表和简要表是不怎么重要的,可以忽略掉。注意看摘要表。首先要解释两个名词。 奇异值。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 672,574
精华内容 269,029
关键字:

对应点怎么找