VS2022-C++使用 matplotlibcpp 绘图库

一、部署、使用该库目的:

它能实现的功能:
将多个分散的图集中显示在一个画布上(本文需求);
将数据可视化、实现各式各样的建模图形、折线图、散点图、3D图等。
例如:
在这里插入图片描述

独立图像窗口:分散,不太友好的对比图:

在这里插入图片描述

二、说明:

matplotlibcpp,是C++的绘图库。使用C++的接口头文件但其底层是利用的python中的工具包matplotlib绘图的,所以在使用matplotlibcpp前需要安装python。

该需求应用 在python里面实现步骤很简单,安装->导入->调用。
而在C++需要 手动配置、可能有多个异常需处理,涉及的多个操作步骤,后文列出。
例如,

三、python使用matplotlibcpp

import matplotlib.pyplot as plt
...读入图像...
...处理图像...
...显示图像...

#plt.subplot(行, 列, 第几个)
#plt.axis('off')表示关闭坐标轴,即不显示坐标轴刻度、标签和刻度线。
#这在绘制图形时通常用于创建简洁的图形,例如仅显示图形本身,而不显示坐标轴信息。
#显示
plt.figure(figsize=(10, 10))
plt.subplot(2, 2, 1)#行、列、第几个
plt.imshow(cv2.cvtColor(combined_image, cv2.COLOR_BGR2RGB))
plt.title('Detected Lines and Intersections')
plt.axis('off')

plt.subplot(2, 2, 2)#2行两列中的第二个
plt.imshow(cv2.cvtColor(rotated_image, cv2.COLOR_BGR2RGB))
plt.title('Rotated Image')
plt.axis('off')

plt.subplot(2, 2, 3)#2行2列中的第3个
plt.imshow(cv2.cvtColor(edges, cv2.COLOR_BGR2RGB))
plt.title('out')
plt.axis('off')
plt.show()

在这里插入图片描述

四、C++使用matplotlibcpp

步骤:
1.安装python
2.在python里安装模块:numpy、matplotlib
3.vs2022配置:头文件、库文件、链接器的依赖项
4.下载matplotlibcpp.h,可能需要科学上网
5.测试

详细步骤:

1.安装python

https://www.python.org/downloads/
1.1.验证是否安装成功
进入cmd,输入python(假设在安装过程中已经勾选了配置环境变量)得到如下显示则安装成功:
在这里插入图片描述

延伸:假如存在两个版本,想切换到对应的版本,需在环境变量里将要使用的移动至前面,或删掉不用的版本
在这里插入图片描述

2.在python里安装模块:numpy、matplotlib

直接输入:

pip install numpy
而不是在进入python后
>>>pip install numpy

例如:
在这里插入图片描述

安装python版的matplotlibcpp模块输入以下指令,首先需要升级pip的版本之后再进行指令安装:

python -m pip install --upgrade pip
pip install matplotlib

如下图,因为我在VS使用python时已经安装过这两个模块,再次安装会提示:

在这里插入图片描述

3.VS2022配置:基于Debug x64

在VS工程属性中,与配置opencv原理一致
如图
在这里插入图片描述

3.1 VC++目录->包含目录:
在这里插入图片描述

3.2 VC++目录->库目录:
在这里插入图片描述

3.3 链接器->输入->附加依赖项:
重点:
debug要使用python39_d.lib
release 使用python39.lib
是.lib,不是.dll

在这里插入图片描述
在这里插入图片描述

3.4 复制dll文件
将python3.dll、python39.dll、vcruntime140.dll(在python安装路径下找)复制到VS工程目录下
在这里插入图片描述

4 .下载 matplotlibcpp

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

在这里插入图片描述
复制.h到VS工程下:
在这里插入图片描述

若复制到VS工程下,可直接引用,反之需使用绝对路径或相对路径引用:
在这里插入图片描述

5.测试

5.1绘曲线测试:
出错:
错误 LNK2019 无法解析的外部符号 __imp__Py_NegativeRefcount,函数 _Py_DECREF 中引用了该符号 QR code E:\Image\IA00\qxp\QR_code\code.obj 1

错误 LNK2019 无法解析的外部符号 __imp__Py_RefTotal,函数 _Py_DECREF 中引用了该符号 QR code E:\Image\IA00\qxp\QR_code\code.obj 1
在这里插入图片描述

在py头文件里注释

xxx\Python\Python39\include  找到 pyconfig.h

在这里插入图片描述

尝试运行若还无法解析则可能还需要屏蔽下面:

xxx\Python\Python39\include  找到 object.h

在这里插入图片描述

成功运行:
在这里插入图片描述

5.2显示图片:
使用plt::subplot(2, 3, 1);报错
在这里插入图片描述
在这里插入图片描述

解决:
在这里插入图片描述

修改后运行前最好重新清理工程!!!

正常使用:

在这里插入图片描述

基本语句规则:

plt::figure_size(1000, 1000);//创建一个1000x1000的画布
plt::subplot(2, 3, 5);             //设置子图位置 为2行,3列中的第5个
plt::imshow(src.ptr<uchar>(0), src.rows, src.cols, src.channels());//图片数据,高宽、图像通道
plt::title("src");                    //对应图片的标题
plt::axis("off");                   //关闭坐标轴

不关闭坐标轴则出现如下:

在这里插入图片描述

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值