0

我有一个适用于图像的 python 代码。出于一些性能原因,我决定使用一个 C++ 程序,它的函数没有任何输入参数,但它的输出是 cv::mat 格式的图像数据。

我想从我的 python 代码中访问这个输出数据。

我使用 subprocess.check_output 调用这个 c++ 代码。

如何从我的 python 代码访问图像数据?

这是我的python代码的一部分:

        s1 = subprocess.check_output("g++ watermark.cpp `pkg-config --cflags --libs opencv` -lm  -o out2;./out2",
                                     shell=True)

        print("TYPE ==> ", type(s1), " size : ", sys.getsizeof(s1))

        print(s1.decode("utf-8"))

这是我的 C++ 代码:

#include <opencv2/opencv.hpp>

#include <iostream>


using namespace std;
using namespace cv;

Mat watermark()
{
        cout << " This is a simple watermark !";
        Mat source_img, watermark_img;
        source_img = imread("source.jpg");
        watermark_img = imread("my_logo.png");

        int width = watermark_img.size().width;
        int height = watermark_img.size().height;
        int x_pos = rand() % (source_img.size().width - width - 10) + 10;
        int y_pos = rand() % (source_img.size().height - height - 10) + 10;

        cv::Rect pos = cv::Rect(x_pos, y_pos, width, height);
        double alpha = 0.5;

        addWeighted(source_img(pos), alpha, watermark_img, 1 - alpha, 0.0, source_img(pos));

        return source_img;
}


int main()
{
        Mat new_image = watermark();
        return 0;
}


我想在 main 函数中访问 new_image 数据。

当我运行我的 python 代码时,它完全运行,我看到这条消息:“这是一个简单的水印!”

但我不知道如何访问图像数据以在我的 python 代码中使用它来显示它。

有人有什么想法可以帮助我吗?

4

0 回答 0