lava / matplotlib-cpp

Extremely simple yet powerful header-only C++ plotting library built on the popular matplotlib
MIT License
4.28k stars 1.12k forks source link

error: no member named 'imshow' in namespace 'matplotlibcpp' #233

Open kanzha2020 opened 3 years ago

kanzha2020 commented 3 years ago

System information (version) OpenCV => 4.5.0 Operating System / Platform => Mac OS X 10.15.6 Environment => Jupyter Notebook C++14 Python => 3.8.6 Matplotlib version 3.3.2

Detailed description From "Add support for imshow() #79", I downloaded the matplotlibcpp.h and try to run imshow.cpp (downloaded from alexdewar/matplotlib-cpp) with jupyter notebook. However, I still get the following error:

input_line_10:13:6: error: no member named 'imshow' in namespace 'matplotlibcpp'
plt::imshow(zptr, nrows, ncols, colors);
~~~~~^

My jupyter file is:

#define __USE_MATH_DEFINES
#include <cmath>
#include "includeLibraries.h"
#include "matplotlibcpp.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <string>
#include <fstream>
#include "xeus/xjson.hpp"
#include "xtl/xbase64.hpp"
#include "numpy/arrayobject.h"
#include <Eigen/Dense>
using namespace std;
namespace plt = matplotlibcpp;
// Prepare data
int ncols = 500, nrows = 300;
std::vector<float> z(ncols * nrows);
for (int j=0; j<nrows; ++j) {
    for (int i=0; i<ncols; ++i) {
        z.at(ncols * j + i) = std::sin(std::hypot(i - ncols/2, j - nrows/2));
    }
}
const float* zptr = &(z[0]);
const int colors = 1;
plt::title("My matrix");
plt::imshow(zptr, nrows, ncols, colors);
// Show plots
plt::save("imshow.png");
plt::pause(5);
plt::close();

My includeLibraries.h is:

#pragma cling add_library_path("/usr/local/Cellar/opencv/4.5.0/lib/")
#pragma cling add_include_path("/usr/local/Cellar/opencv/4.5.0/include/opencv4/")
#pragma cling load("/usr/local/Cellar/dlib/19.21/lib/libdlib.19.21.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_datasets.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_aruco.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_bgsegm.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_bioinspired.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_calib3d.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_ccalib.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_core.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_dnn_objdetect.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_dnn.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_dpm.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_face.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_features2d.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_flann.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_freetype.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_fuzzy.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_gapi.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_hfs.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_highgui.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_img_hash.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_imgcodecs.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_imgproc.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_line_descriptor.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_ml.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_objdetect.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_optflow.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_phase_unwrapping.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_photo.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_plot.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_quality.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_reg.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_rgbd.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_saliency.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_sfm.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_shape.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_stereo.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_stitching.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_structured_light.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_superres.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_surface_matching.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_text.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_tracking.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_video.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_videoio.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_videostab.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_xfeatures2d.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_ximgproc.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_xobjdetect.4.5.0.dylib")
#pragma cling load("/usr/local/Cellar/opencv/4.5.0/lib/libopencv_xphoto.4.5.0.dylib")

#pragma cling add_include_path("/usr/local/Cellar/python@3.8/3.8.6/Frameworks/Python.framework/Versions/3.8/include/python3.8")
#pragma cling add_include_path("/usr/local/Cellar/eigen/3.3.8_1/include/eigen3/") // include eigen3
#pragma cling add_include_path("/usr/local/Cellar/numpy/1.19.2/lib/python3.8/site-packages/numpy/core/include") // By default Matplotlib for C++ uses Numpy arrays.  This requires the above header file.
#pragma cling add_library_path("/usr/local/Cellar/python@3.8/3.8.6/Frameworks/Python.framework/Versions/3.8/lib")
#pragma cling load("/usr/local/Cellar/python@3.8/3.8.6/Frameworks/Python.framework/Versions/3.8/lib/libpython3.8.dylib")
#define WITHOUT_NUMPY 1

Other matplotlibcpp functions such as plt::plot and plt::quiver work, but plt::imshow. I appreciate if any experts can advise me how to solve this issue, thanks a lot!!