来自表示RGB imag的浮点数组的初始CV::MAT

2024-09-27 21:29:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

现在我不知道如何从这个数据构造一个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元组


Tags: 对象程序size序列化进程整数数组cv
1条回答
网友
1楼 · 发布于 2024-09-27 21:29:40

更正项目:

  • 您需要CV_8UC3类型来存储3通道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);

相关问题 更多 >

    热门问题