c – 用于cv :: Mat参数的OpenCV std :: vector
执行此:
std::vector<cv::Point2f> pts; // contains 4 elements cv::Mat ptsMat = ((cv::InputArray)pts).getMat(); 在一台机器上,我得到了一个带有2个通道的4乘1 cv :: Mat.每个元素代表一个2D点. 在使用Windows 10上的CMake从源代码构建的OpenCV 3.1的两台机器上. 编辑 我开始在不同的机器上遇到类似的问题. std::vector<cv::Point2f> points = { cv::Point2f(2,1),cv::Point2f(2,cv::Point2f(1,3) }; cv::InputArray arr = points; cv::Mat ma = arr.getMat(); std::cout << ma.ptr<float>(0)[1]; 但是当我在Release中编译它时,它会在Access违规读取位置的最后一行崩溃… 进一步的调查显示,产生影响的关键标志是: 运行时库:多线程DLL(/ MD)——–> 运行时库:多线程DLL调试(/ MDd)——–>作品 编辑2 根据Mateen Ulhaq的评论,我查了一下 std::vector<cv::Point2f> points; cv::Mat image(points); 这很好用. 编辑3 刚刚检查过,OpenCV 3.2也出现同样的问题 解决方法
这不是我正在寻找的答案,但这里就是这样.
似乎每次发生这种情况,都是在Windows Update之后立即发生的. 我完全删除并重新构建了以下库: 这为我修好了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |