在 opencv c++ 中保存多维矩阵
Saving multi-dimensional matrix in opencv c++
我在 opencv, c++ 中创建了一个 3D 浮点矩阵,在他的答案中借助 brunocodutra。我的矩阵是 1024*1024*N(N 不是常数,可能会改变(
当我说const int N = some_number;
我可以说
typedef Vec<float,N> VecNf;
在这个类型定义之后,我可以玩矩阵了。但是,我不希望 N 是恒定的,因此我被困在那里。我相信,应该有一些简单的解决方案,但我还找不到。
编辑:我添加了保存矩阵的代码。假设我正确创建了具有 100 个通道的 3D Mat noise
。
typedef Vec<float,100> Vec100f;
void writeNoise_ND(string filename,Mat noise) throw(){
int chans = noise.channels();
int sz = noise.rows;
FILE* fp = fopen(filename.c_str(),"wb");
if (!fp){
perror("out directory is not foundn");
}
float *buffer = new float[sz];
for(int c = 0; c < chans; c++){
for(int i=0;i<sz;++i){
for(int j=0;j<sz;++j)
buffer[j]=noise.at<Vec100f>(i,j)[c];
fwrite(buffer,sizeof(Vec100f),sz,fp);
}
}
fclose(fp);
free(buffer);
}
有人可以指导我吗?如果已经问过问题,请后悔。
提前感谢,
您的垫子似乎是我认为的具有N个通道的2D垫子。 就像典型的图像是 2D Mat 3 通道 (RGB( 一样。 以下代码将存储所有通道 0,后跟所有通道 1 等,直到通道 N-1:
#include <fstream>
#include <vector>
void writeNoise(string filename, Mat noise)
{
int chans = noise.channels();
int sz = noise.rows; // should check that noise.cols is == noise.rows
std::ofstream f(filename, ios::out | ios::binary);
if (!f.is_open())
throw std::ofstream::failure("out directory is not foundn");
std::vector<float> buffer(sz);
for(int c = 0; c < chans; c++)
{
for(int i = 0; i < sz; ++i)
{
float* p = noise.ptr<float>(i) + c;
for(int j = 0; j < sz; ++j)
{
buffer[j] = *p;
p += chans;
}
f.write((const char *) &buffer[0], sizeof(float) * buffer.size());
}
}
f.close();
}
如果你想在(行 = 15,col = 15(访问通道 15,鉴于您不知道编译时的通道数(所以你不能使用 at()
(,你可以这样做;
float get(cv::Mat m, int row, int col, int chan)
{
float* p = m.ptr<float>(row);
return p[col * m.channels() + chan];
}
/* ... */
cout << get(noise, 15, 15, 15) << endl;
请注意,使用这样的get()
对像素进行顺序访问是不合适的(因为与我在writeNoise()
中那样访问像素相比,它会非常慢(
相关文章:
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 无法从Java读取C++中保存的Opencv Mat映像
- 在opencv c++目录中从/加载/保存多个图像
- 如果我想通过OpenCV dnn模块加载PyTorch的模型,我应该如何保存它
- OpenCV imwrite不会保存图像
- 如何将捕获的图像存储在OpenCV中(将图片保存到计算机)
- 有没有办法拿一个opencv显示窗口并将其保存到GUI窗口?
- 对 OpenCV C++ 程序进行单元测试,该程序拍摄照片并将其保存到文件中
- Opencv 保存视频
- 我想将 OpenCV 中处理后的图像保存为“input_name+enhanced.input_image_format
- OpenCV - 在矢量<Mat>中保存垫子
- 在Ubuntu中使用VideOwriter(OpenCV)保存视频作为MP4时出错
- 无法将图像保存在具有白色背景的JPG中 OpenCV
- 将 OpenCV MAT 保存到 TXT 文件作为不带分隔符的十六进制值
- OpenCV 4.0 无法保存视频
- 视频编写器功能不会使用 OpenCV-3.0.0 保存文件
- 无法使用cv :: imwrite保存垫子图像在JNI本机代码OPENCV中
- OPENCV IMWRITE保存黑色PNG
- 使用 OpenCV 保存 .pgm 图像时出错
- 保存 OpenCV 上 Hough Circle 检测到的圆圈内的内容