写在前面
前段时间在做基于点云库pcl的icp点云配准,自己改了下源码增加了一些参数,为方便观察每个不同参数组合下的结果,想直接将每次不同参数对应的结果曲线绘制并保存下来。于是在网上找到了相关的工作:
上图以及本文参考的源码出自:Matlab风格的Plot类for opencv
本文作者修改后的一个应用效果:
上述链接中的代码对于OpenCV340修改很少的几处便可直接使用:
https://github.com/jack-Dong/testPolt/
由于我要用到pcl,而当OpenCV340与我配置的pcl1.10.0一起使用时,会出现问题,于是将上述文章中的代码做了改动以令其在我之前配置好的OpenCV440+pcl1.10.0上运行:vs2019配置opencv+contrib-440 + PCL1.10.0
OpenCV340版本
OpenCV340想自己动手配置的话建议自行CSDN一下,有很多很详细的博客,在此不列举。
要是急用可以直接用我以前已经配好的文件:share_noel/OpenCV/OpenCV340/opencv.zip
https://blog.csdn.net/qq_41102371/article/details/125646840
直接能用的绘曲线图的代码(整个工程):share_noel/OpenCV/opencv_plot/202011opencv_plot.zip
https://blog.csdn.net/qq_41102371/article/details/125646840
愿意用c币支持的朋友也可在此下载:
opencv340.zip
202011opencv_plot.zip
(上述下载链接中csdn与百度网盘的文件完全相同,只不过网盘免费下载)
若运行不成功,请检查opencv文件是否放对位置。
打开项目属性-配置属性-调试-环境,看里面的PATH=D:\software\opencv\opencv\build\x64\vc15\bin;
检查有没有把下载的压缩包解压到了正确位置,如若放正确了的话,是存在D:\software\opencv\opencv\build\x64\vc15\bin的且里面是有opencv_world340d.dll的
OpenCV440版本
首先配置OpenCV440:vs2019配置opencv+contrib-440 + PCL1.10.0
不需要用到pcl的朋友可以忽略pcl的部分,并且下文也不会涉及pcl的使用。
像opencv和pcl这种较大开源库在vs的配置使用需要注意两个比较大的点,一是文件的准备,二是vs里面的属性表配置以及项目属性里面的-调试-环境(告诉vs在哪找dll)。
所以opencv和pcl的使用一般是一次性将属性表配置好,属性表里面包含了在哪找xxx.h、xxx.lib等信息,配置好基本是一劳永逸的,下次用直接将属性表复制进别的工程即可。
下面是已经配置好并代码已经调试好的整个工程:share_noel/OpenCV/opencv_plot/202011opencv440_plot.zip
https://blog.csdn.net/qq_41102371/article/details/125646840
愿意用c币支持的朋友也可在此下载:
202011opencv440_plot.zip
实现效果
修改部分函数调用
在上文提到的参考博客的代码中,一些函数与opencv440版本不兼容,所以需要修改。
现将几处典型的地方加以说明
添加文本函数:
opencv340:cvPutText()
在https://docs.opencv.org/3.4.0/d9/df8/tutorial_root.html搜索cvputtext即可找到
/*
//cvPutText()函数定义
void cvPutText ( CvArr * img,//传入要添加文字的图像
const char * text,//要添加的文字
CvPoint org,//添加的位置
const CvFont * font,//字体
CvScalar color //颜色
)
*/
//调用例如:
cvPutText(this->Figure, ylabel_name.c_str(), cvPoint( x, y), &font, label_color);
在opencv440中对应cv::putText()函数
cv::putText()
/*
void cv::putText ( InputOutputArray img,//传入要添加文字的图像
const String & text,//要添加的文字
Point org,//
int fontFace,//https://docs.opencv.org/4.4.0/d6/d6e/group__imgproc__draw.html#ga0f9314ea6e35f99bb23f29567fc16e11
double fontScale,//字体大小
Scalar color,//颜色
int thickness = 1,//线粗
int lineType = LINE_8,//线类型
bool bottomLeftOrigin = false //When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner.
)*/
//调用:
cv::putText(cv::cvarrToMat(image), "202011 by Carlos_Lee", cvPoint(700, 70), CV_FONT_HERSHEY_SIMPLEX, 0.7, this->text_color);
可以看出,两个版本的函数传入参数的,类型是不同的,比如图像格式:CvArr *(opencv340)和InputOutputArray(opencv440),字符串:char (340)和const String(440)等等
其中opencv340的cvPutText()使用的图片格式是IplImage image;
在opencv440的cv::putText()中使用需要转换成mat格式cv::cvarrToMat(image)
数据类型转换参考:
1、https://blog.csdn.net/fu_shuwu/article/details/77399835
2、https://blog.csdn.net/weixin_42638401/article/details/88866820
同理,在此列出已修改的函数
opencv340 | opencv440 |
---|---|
cvPutText() | cv::putText() |
cvLine() | cv::line() |
cvCircle() | cv::circle |
cvRectangle() | cv::rectangle() |
最近在做icp算法相关的学习工作,为了方便观察不同参数下的MSE曲线和时间消耗,用pcl+ opencv440+绘制曲线,实现icp配准过程中每次迭代后两点云MSE的以及时间消耗曲线。再也不用把数据记录进文本然后观察密密麻麻的过程数据了,还是挺有用的。再次感谢原作者:Matlab风格的Plot类for opencv
蓝色是MSE,绿色是时间消耗
参考及感谢
Matlab风格的Plot类for opencv
https://blog.csdn.net/fu_shuwu/article/details/77399835
https://blog.csdn.net/weixin_42638401/article/details/88866820
vs2019配置opencv+contrib-440 + PCL1.10.0
完
边学边用,如有错漏,敬请指正
--------------------------------------------------------------------------------------------诺有缸的高飞鸟202011