win10+VS2015+OpenCV4 调用Python的matplotlib绘制曲线、图表、直方图

win10+VS2015+OpenCV4 调用Python的matplotlib绘制曲线、图表、直方图

matplotlib是Python语言中最流行的工具之一,它是基于Python的开源项目,旨在为Python提供一个数学绘图库,我们可以用它来制作简单的图表,如折线图‘散点图。用来将数据可视化

1、我的运行环境及软件版本信息:

(1)Microsoft Visual Studio Community 2015

(2)Anaconda3-5.2.0-Python3.6.5-Windows-x86_64

(3)OpenCV4.1.2

在安装Anaconda的过程中,记得勾选将Anaconda添加到环境变量中,可以省掉很多麻烦。并安装好CMake软件,勾选添加到环境变量中。

 

2、下载Matplotlib-cpp源码

下载地址:git clone https://github.com/lava/matplotlib-cpp.git

下载下来的是压缩包,解压后如下:

 

以记事本形式打开contrib目录下的WinBuild.cmd文件,修改文件中4至8行为自己的配置环境:

 

其中:14表示VS2015,Release表示以Release模式进行编译,PYTHONHOME为Anaconda的安装目录,跟前面添加至环境变量的目录一致。

 

3、配置好运行环境后,打开控制台cmd,切换至matplotlib-cpp对应的目录,然后运行WinBuild.cmd文件即可完成编译(必须保证最后编译结果无错误):

cmd --->  cd C:\Intel\matplotlib-cpp-master\contrib   ---->  WinBuild.cmd

 

 

4、配置项目环境及测试

1)、在VS2015中建立名为test_matplotlib的Win32控制台项目,建立完成后将运行环境设置为:Release x64

 

然后,为项目添加包含目录、库目录、附加依赖项,详细步骤如下:

(a)VC++目录–>包含目录:D:\Program Files\OpenCV\opencv4.1.2\opencv\build\include\opencv2;D:\Program Files\OpenCV\opencv4.1.2\opencv\build\include;C:\ProgramData\Anaconda3\include;C:\ProgramData\Anaconda3\Lib\site-packages\numpy\core\include;C:\Intel\matplotlib-cpp-master;

(b)VC++目录–>库目录:D:\Program Files\OpenCV\opencv4.1.2\opencv\build\x64\vc14\lib;D:\Program Files\OpenCV\opencv4.1.2\opencv\build\x64\vc15\lib;C:\ProgramData\Anaconda3\libs;

(c)链接器–>输入–>附加依赖项:opencv_world412.lib;python36.lib;python3.lib;_tkinter.lib;

2)、在新建cpp文件中添加如下测试代码:

// matplotlib.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>

#include <vector>


#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;


//绘制折线段
void draw_polyline();
//从数据绘制各种图表
void draw_picture();
//3D的数据可视化
void draw_3Dpicture();
//显示图像
void show_image();


int main()
{
	//draw_polyline();
	//draw_picture();
	//draw_3Dpicture();

	show_image();

	
	return 0;
}

//#include "matplotlibcpp.h"
//namespace plt = matplotlibcpp;
//绘制折线段
void draw_polyline()
{
	plt::title("My_test");
	plt::plot({ 1,3,2,4 });
	plt::show();

	system("pause");
}


//显示图像
void show_image()
{
	//通过 plt::imshow 支持黑白跟彩色图像显示,显示一张图像的代码如下:
	cv::Mat src = cv::imread("timg1.jpg");
	cv::cvtColor(src, src, cv::COLOR_BGR2RGB);
	const uchar* buff = src.ptr<uchar>(0);
	int h = src.rows;
	int w = src.cols;
	int channels = src.channels();
	plt::title("My Demo");
	plt::imshow(buff, h, w, channels);
	plt::show();
}

//从数据绘制各种图表
void draw_picture()
{
	// Prepare data.
	int n = 5000; // number of data points
	std::vector<double> x(n), y(n);
	for (int i = 0; i<n; ++i) 
	{
	    double t = 2 * CV_PI*i / n;
	    x.at(i) = 16 * sin(t)*sin(t)*sin(t);
	    y.at(i) = 13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t);
	
	}
	
	// plot() takes an arbitrary number of (x,y,format)-triples. 
	// x must be iterable (that is, anything providing begin(x) and end(x)),
	// y must either be callable (providing operator() const) or iterable. 
	plt::plot(x, y, "r-", x, [](double d) { return 12.5 + abs(sin(d)); }, "k-");

	plt::title("picture");
	// show plots
	plt::show();
}

//来个3D的数据可视化
void draw_3Dpicture()
{
	std::vector<std::vector<double>> x, y, z;
	for (double i = -5; i <= 5; i += 0.25)
	{
	    std::vector<double> x_row, y_row, z_row;
	    for (double j = -5; j <= 5; j += 0.25)
		{
	        x_row.push_back(i);
	        y_row.push_back(j);
	        z_row.push_back(::std::sin(::std::hypot(i, j)));
		}
		x.push_back(x_row);
		y.push_back(y_row);
		z.push_back(z_row);
	}
	
	plt::plot_surface(x, y, z);
	plt::show();
}

3)在Release下直接运行代码会报如下错误:This application failed to start because it could not find or load the QT platform plugin "windows" in " ".

不要慌,已经有提示:需要Qt组件支持。

(1)将C:\ProgramData\Anaconda3目录下的python3.dll、python36.dll;和C:\ProgramData\Anaconda3\pkgs\qt-5.9.5-vc14he4a7d60_0\Library\plugins目录下的platforms文件夹;以及C:\ProgramData\Anaconda3\pkgs\qt-5.9.5-vc14he4a7d60_0\Library\bin目录下的Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll复制到测试项目的Release目录下。
(2)重新生成解决方案,并执行。

调用 void show_image(),会显示图像如下:

调用 draw_polyline(),会显示图像如下:                   

调用 draw_picture(),会显示图像如下: 

调用 draw_3Dpicture(),会显示图像如下: 

 

 

 

参考文章:

1、Application failed to start because it could not find or load the QT platform plugin “windowshttps://www.cnblogs.com/IUNI/p/7028042.html

2、五分钟学会C++高效图表绘制神器调用   https://cloud.tencent.com/developer/article/1588309

 

 

  • 不要失去信心,只要坚持不懈,就终会有成果的。

 

 

猜你喜欢

转载自blog.csdn.net/yishuihanq/article/details/105961581