软件版本信息
Windows10系统
OpenCV4.5.1
VS2017
01
找问题是个技术活
因为需要把一个点阵DM码转换位标准DM码,我就先用python快速验证测试,写了一个演示程序,运行结果如下:
其中用到轮廓分析相关的知识,有一个步骤是获取最小外接矩形,得到旋转矩阵的四个顶点坐标,Python中的代码如下
rect = cv.minAreaRect(np.array(points))
print(rect)
box = cv.boxPoints(rect)
print(box)
box = np.int0(box)
print(box)
翻译成C++的代码如下:
cv::RotatedRect rrt = cv::minAreaRect(pts);
cv::Mat ptfs;
cv::boxPoints(rrt, ptfs);
std::cout << ptfs << std::endl;
运行打印显示坐标信息如下:
果然不一样,刚开始我没有注意,于是就掉坑了!打印出来以看居然是这样!我猜想原因是C++中所有图像对象都是Mat的数据结构,Python中都是numpy数组,导致处理数据在返回时候结构顺序不同,才变成了这样。真实的具体原因是什么,还有待进一步探索!