跳到主要内容

在 C++ 中使用 matplotlib 可视化 OpenCV 图像

安装 matplotlib-cpp

Extremely simple yet powerful header-only C++ plotting library built on the popular matplotlib

配置过程可参考

C++ OpenCV 中使用 matplotlib-cpp

  • 显示单张图片
#include <opencv2/opencv.hpp>
#include "matplotlibcpp.h"

namespace plt = matplotlibcpp;

int main() {
cv::Mat src_img = cv::Mat(200, 400, CV_8UC3);
cv::cvtColor(src_img, src_img, cv::COLOR_BGR2RGB);
src_img.setTo(cv::Scalar(0, 200, 200));

plt::figure();
plt::imshow(src_img.data, src_img.rows, src_img.cols, 3);
plt::show();

return 0;
}

  • 使用 subplot 显示多张图片
#include <iostream>
#include <opencv2/opencv.hpp>
#include "matplotlibcpp.h"

namespace plt = matplotlibcpp;

int main() {
// cv::Mat src_img = cv::imread("/mnt/c/Users/rcxxx/Pictures/wallpaper/other-2.png");
cv::Mat src_img = cv::Mat(200, 400, CV_8UC3);
cv::cvtColor(src_img, src_img, cv::COLOR_BGR2RGB);
src_img.setTo(cv::Scalar(0, 200, 200));

plt::figure();
plt::subplot(1,2,1);
plt::imshow(src_img.data, src_img.rows, src_img.cols, 3);

plt::subplot(1,2,2);
src_img.setTo(cv::Scalar(200, 0, 200));
plt::imshow(src_img.data, src_img.rows, src_img.cols, 3);

plt::tight_layout();
plt::show();

return 0;
}

直接运行,编译没有报错,但是程序直接结束了

Debug 时发现问题出在 matplotlibcpp.h

将三行 PyFloat_FromDouble 修改为 PyLong_FromDouble

然后重新执行

参考