C++ 如何在C++;?

C++ 如何在C++;?,c++,image-processing,bmp,quadtree,C++,Image Processing,Bmp,Quadtree,我想在四叉树中读取并存储BMP文件: BMP文件的示例如下: P1 4 4 1 0 1 1 0 1 0 0 1 1 0 0 1 1 0 0 我想到的四叉树的结构是: struct QuadTreeNode{ int size; struct QuadTreeNode *children[4]; int color; //0 white, 1 black, -1 div }; 我很难想出一种方法来构建四叉树。在读取文件时构建四叉树的好方法是什么?我应该从叶子开始还是从主

我想在
四叉树中读取并存储
BMP
文件:

BMP
文件的示例如下:

P1
4 4
1 0 1 1
0 1 0 0
1 1 0 0
1 1 0 0
我想到的
四叉树的结构是:

struct QuadTreeNode{
   int size;
   struct QuadTreeNode *children[4];
   int color;    //0 white, 1 black, -1 div
};

我很难想出一种方法来构建
四叉树。在读取文件时构建
四叉树的好方法是什么?我应该从
叶子开始
还是从主
四叉树开始

我将开始定义一些很好的结构来存储图像,这些结构也能够将子图像映射到原始数据中

e、 g

4子项:

Img tl {toplevel.width/2,toplevel.height/2, toplevel.rowstep, toplevel.data};
Img tr {toplevel.width/2,toplevel.height/2, toplevel.rowstep, toplevel.data+toplevel.width/2};
Img bl {toplevel.width/2,toplevel.height/2, toplevel.rowstep, toplevel.data + toplevel.rowstep*toplevel.height/2};
Img br {toplevel.width/2,toplevel.height/2, toplevel.rowstep, toplevel.data + toplevel.rowstep*toplevel.height/2 + toplevel.width/2};
现在,只要宽度大于1(递归下降),您就可以递归地将每个img拆分为4个较小的img。
然后你就有了叶子的颜色值
在递归提升中,你可以对来自更深层次的4个值求和/平均(如果你不需要它们,就扔掉子图像)

最后你应该有一个完整的四叉树

附言:

还有一点意见:

我会尽量不在四叉树结构中使用原始指针。
可能使用
std::数组子项

变量的大小是什么

结构还应包含指向父节点的指针,以便可以在四叉树中自由移动

保存颜色的变量应替换为包含代表颜色的3个变量的结构,因为像素通常由3个组件表示:红色、绿色和蓝色。如果您正在处理一个二进制图像,bool或char就足够了

在您的结构中,您需要一个附加变量,它具有四叉树的位置和大小

你的结构可能看起来像这样

struct QuadtreeNode{
    short x1;
    short y1;
    short x2;
    short y2;
    Color_Pixel pixel;        
    struct QuadtreeNode *parent;
    struct QuadtreeNode *quad[4];
};

struct Color_Pixel{
    uchar r;
    uchar g;
    uchar b;
};
你的问题

我应该从叶子开始还是从主四叉树开始

您应该从“主四叉树”开始。第一个节点代表整个图像,然后您必须将图像分割为其他节点或“叶子”。
在析构函数中,为了正确释放已分配的资源,您必须从底部移动到顶部,在那里您应该从“叶子”开始。

在我看来,您应该开始写入所有叶子,然后从主四叉树开始,这样当叶子节点出现在主四叉树中时,您可以在之前写入的叶子列表中搜索其数据
Img tl {toplevel.width/2,toplevel.height/2, toplevel.rowstep, toplevel.data};
Img tr {toplevel.width/2,toplevel.height/2, toplevel.rowstep, toplevel.data+toplevel.width/2};
Img bl {toplevel.width/2,toplevel.height/2, toplevel.rowstep, toplevel.data + toplevel.rowstep*toplevel.height/2};
Img br {toplevel.width/2,toplevel.height/2, toplevel.rowstep, toplevel.data + toplevel.rowstep*toplevel.height/2 + toplevel.width/2};
struct QuadtreeNode{
    short x1;
    short y1;
    short x2;
    short y2;
    Color_Pixel pixel;        
    struct QuadtreeNode *parent;
    struct QuadtreeNode *quad[4];
};

struct Color_Pixel{
    uchar r;
    uchar g;
    uchar b;
};