使用 Redis 在 C++ 和 python 之间共享 Opencv 图像

Posted

技术标签:

【中文标题】使用 Redis 在 C++ 和 python 之间共享 Opencv 图像【英文标题】:Sharing Opencv image between C++ and python using Redis 【发布时间】:2019-12-04 09:45:06 【问题描述】:

我想使用 Redis 在 C++ 和 python 之间共享图像。现在我已经成功分享了号码。在 C++ 中,我使用hiredis 作为客户端;在 python 中,我只做import redis。我现在的代码如下:

cpp 设置值:

VideoCapture video(0);
Mat img;
int key = 0;
while (key != 27)

    video >> img;
    imshow("img", img);
    key = waitKey(1) & 0xFF;

    reply = (redisReply*)redisCommand(c, "SET %s %d", "hiredisWord", key);
    //printf("SET (binary API): %s\n", reply->str);
    freeReplyObject(reply);
    img.da

获取值的python代码:

import redis

R = redis.Redis(host='127.0.0.1', port='6379')

while 1:
    print(R.get('hiredisWord'))

现在我想分享 opencv 图像而不是数字。我该怎么办?请帮忙,谢谢!

【问题讨论】:

作为一种替代方法,您可以只从 C++ 共享文件路径并在 Python 中读取它。为了节省编码/解码开销,您可以使用pickle 库来序列化对象。 OpenCV 图像只是 Python 中的 Numpy 数组,所以你可以看看这个...***.com/a/55313342/2836621 我想使用C++将opencv图像保存到redis中,并使用python从redis中读取图像。有什么建议吗? 【参考方案1】:

这里是一个使用cpp_redis 的示例,而不是hiredis(可在https://github.com/cpp-redis/cpp_redis 获得)。

以下 C++ 程序使用 OpenCV 从磁盘上的文件中读取图像,并将图像存储在 Redis 中的密钥 image 下:

#include <opencv4/opencv2/opencv.hpp>
#include <cpp_redis/cpp_redis>

int main(int argc, char** argv)

  cv::Mat image = cv::imread("input.jpg");
  std::vector<uchar> buf;
  cv::imencode(".jpg", image, buf);

  cpp_redis::client client;
  client.connect();
  client.set("image", buf.begin(), buf.end());
  client.sync_commit();

然后在 Python 中,您从数据库中获取图像:

import cv2
import numpy as np
import redis

store = redis.Redis()
image = store.get('image')
array = np.frombuffer(image, np.uint8)
decoded = cv2.imdecode(array, flags=1)
cv2.imshow('hello', decoded)
cv2.waitKey()

【讨论】:

以上是关于使用 Redis 在 C++ 和 python 之间共享 Opencv 图像的主要内容,如果未能解决你的问题,请参考以下文章

Python3之redis使用

django redis

Redis之Python 使用 Redis

缓存系列之三:redis安装及基本数据类型命令使用

python之redis操作

21Python之rabbitMQ,redis