处理多个图像 - 标准

Posted

技术标签:

【中文标题】处理多个图像 - 标准【英文标题】:Processing of several images - standards 【发布时间】:2022-01-10 06:42:19 【问题描述】:

我使用图像。我有一个按钮,用于选择 bmp 格式的图像:

if (OpenPictureDialog1->Execute())

    Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

图像显示在TImage 组件中。然后我将图像分成扇区并计算每个扇区中的所有黑点。之后,我收到一个符号向量,并通过除以符号向量中的最大元素来对其进行归一化。然后我将归一化向量的值保存在库 <sysdyn.h> 中的 DynamicArray 中,并将结果打印在 TMemo 组件上:

DynamicArray<double> NormArr1;
NormArr.Length = n;
Memo1->Lines->Add( "Normalized vector is:" );
for (i = 0; i < n; i++)

    NormArr[i] = cop[i] / (double) max;
    Memo1->Lines->Add(NormArr[i]);

Memo1->Lines->Add( "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" );

我需要以相同的方式处理多张图像,但在DynamicArray 中只保存一张图像的处理结果。所以我应该点击按钮,选择一个图像并找到它的归一化向量。然后我应该使用相同的按钮选择另一个图像,并找到它的归一化向量。之后,我需要比较这些向量的元素。

最重要的是我应该只使用一个按钮,而不是恰好选择 2 个,而是选择很多图像,然后比较它们的归一化向量。我怎样才能做到这一点?我需要正确实施图像的自我训练。

这是我的表格:

【问题讨论】:

@RemyLebeau 你能举个例子吗? @RemyLebeau 或者如果我附上一个项目可能会更好,如果它对你来说不是那么难,你能在我的项目中完全修复它吗? 您对我之前的评论有什么不清楚的地方吗?您在实施它时遇到的问题到底是什么?如果你不知道如何编写一个简单的函数,那么这个任务可能超出你目前的技能。不,我不会为你修复你的项目。这不是这个网站的目的。 @RemyLebeau 是的,我真的不明白你的意思 如何使用 win3.11 VCL 组件或 winapi 中的 FileList 来获取所选目录中的文件列表(所有都可以合并到对话框中)然后将其提供给一些 TListBox,您可以在其中选择多个想要的文件...从该过程中处理这些文件,而不是在每个文件上一一使用 TOpenDialog ....如果您想要的不仅仅是 BMP,请参阅opening image file on c++ , PNG , JPEG,您可以将图像和结果打包到单个结构/类中并创建该结构/类的动态列表,以便访问多个图像/结果 【参考方案1】:

我建议将处理逻辑移到它自己的函数中,该函数将文件名作为输入并返回归一化向量作为输出。然后,当您执行TOpenPictureDialog 时,您可以遍历其Files 属性中的字符串(确保在对话框中启用ofAllowMultiSelect 标志),将每个选定的文件传递给处理函数并保存结果。然后您可以根据需要比较保存的结果。

void __fastcall TMyForm::ButtonClick(TObject* Sender)

    if (OpenPictureDialog1->Execute())
    
        DynamicArray< DynamicArray<double> > AllNormArrs;

        for(int i = 0; i < OpenPictureDialog1->Files->Count; ++i)
        
            DynamicArray<double> NormArr = normalizeFile(OpenPictureDialog1->Files->Strings[i]);
            // use NormArr as needed...

            AllNormArrs.Length = AllNormArrs.Length + 1;
            AllNormArrs[AllNormArrs.High] = NormArr;
        

        // compare AllNormArrs elements as needed...
    


DynamicArray<double> __fastcall TMyForm::normalizeFile(String filename)

    DynamicArray<double> NormArr;
    // load file, calculate normalized values as needed...
    return NormArr;

【讨论】:

谢谢,但我有一些问题: normalizeFile 是一个我可以做任何排列的函数?我可以在那里加载图像吗?将其划分为扇区并在所有计算后通过此函数接收归一化向量?然后我在单击按钮时看到文件(图像)的打开,我不明白这一点。我可以向您展示我的代码的一部分以便更好地解释吗? @Vorrven 是的,您可以在normalizeFile() 中做任何您想做的事情以满足您的需求。编写自己的自定义函数是编程的核心功能,所以我建议你学习如何去做。没有它,你不会走得太远。 我应该也使用那里的OpenFileDialog吗?

以上是关于处理多个图像 - 标准的主要内容,如果未能解决你的问题,请参考以下文章

将多个 png 转换为 bmp 从标准输入到标准输出

机器学习数据清洗之异常数据处理标准差法MAD法箱图法图像对比法异常值处理准则

我的渲染技术进阶之旅你知道数字图像处理的标准图上的女孩子是谁吗?背后的故事你了解吗?为啥这张名为Lenna的图会成为数字图像处理的标准图呢?

我的渲染技术进阶之旅你知道数字图像处理的标准图上的女孩子是谁吗?背后的故事你了解吗?为啥这张名为Lenna的图会成为数字图像处理的标准图呢?

Python-sklearn数据预处理(单/多个数据集数据标准化稳健标准化缺失值填补)

扫描以上的标准模板滑动采集图像及其处理