gpt4 book ai didi

python - 来自表示 RGB 图像的 float 组的初始 CV::MAT

转载 作者:行者123 更新时间:2023-11-28 05:19:14 25 4
gpt4 key购买 nike

我的问题简介:
我在 C++ 中序列化了一个 CV::MAT 对象并发送到一个 Python 程序(更准确地说,我有一个使用 C++ .exe 作为子进程的 Python 程序),我反序列化它在 python 中返回到 (R,G,B) 整数的二维数组

现在我的 python 服务中有一个不同的方法,可以按需将这个 2D 数组发送回 c++ 进程并让它做一些事情我不想使用 boost 序列化程序,因为它基本上是 hell 我自己从 python 序列化了它,并设法为 C++ 进程提供了一个扁平数组以及二维数组的维度(行和列)

现在我不知道如何从这些数据中构造一个 CV::MAT 对象我知道有 Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP) 可能会完成这项工作,但不知道在我认为的情况下会发生什么是

非常感谢任何帮助!

这是我目前的c++代码

    vector<string> imgVector;
int imgRows = stoi(kp.at(7));
int imgCols = stoi(kp.at(8));
split(kp.at(2), ' ', back_inserter(imgVector)); // kp.at(2) is a ' ' seperated array of integers
int* pixels = (int*)malloc(sizeof(int) * imgVector.size());
for (int j = 0; (unsigned)j < imgVector.size(); i++){
pixels[j] = stoi(imgVector[j]);
}
Mat image(imgRows, imgCols, CV_32F, pixels);

但我认为它会生成一个二维整数数组,而不是我想要的 RGB 元组

最佳答案

更正的项目:

  • 您需要类型为 CV_8UC3 才能存储 3 channel int 数组。
  • 垫子的大小应为行*列*3。
  • 每个像素的数据类型应该是uchar

在这些之后,下面的代码应该可以工作。

vector<string> imgVector;
int imgRows = stoi(kp.at(7));
int imgCols = stoi(kp.at(8));
split(kp.at(2), ' ', back_inserter(imgVector)); // kp.at(2) is a ' ' seperated array of integers
uchar* pixels = (uchar*)malloc(sizeof(uchar) * imgRows*imgCols*3);
for (int j = 0; (unsigned)j < imgVector.size(); i++){
pixels[j] = uchar(stoi(imgVector[j]));
}
Mat image(imgRows, imgCols, CV_8UC3, pixels);

关于python - 来自表示 RGB 图像的 float 组的初始 CV::MAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41858211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com