Доступ к выводу кода C ++, который вызывается в python, с помощью suprocess.check_output - PullRequest
0 голосов
/ 06 октября 2019

У меня есть код Python, который работает с изображениями. по некоторым соображениям производительности я решил использовать программу на C ++, в которой есть функция, у которой нет входных аргументов, но ее выходные данные представляют собой данные изображений в формате cv :: mat.

Я хочу получить доступ к этим выводамданные из моего кода Python.

Я называю этот код C ++ с использованием subprocess.check_output.

как я могу получить доступ к данным изображения из моего кода 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;
}


Я хочу получить доступ к данным new_image в основной функции.

, когда я запускаю свойPython-код, он работает полностью, и я вижу это сообщение: «Это простой водяной знак!»

, но я не знаю, как получить доступ к данным изображения, чтобы использовать его в коде моего питона, чтобы показать его.

Кто-нибудь может мне помочь?

...