c++ - 无法使用 VeriFinger 保存处理过的指纹图像

标签 c++ image-processing fingerprint

我正在尝试使用名为 VeriFinger 的 SDK , 来自 Neurotechnology , 处理包含指纹捕获的 BMP 文件(用于增强),并将其保存到新的 BMP 文件。

VeriFinger 附带了一些教程和示例,主要的一个称为 FingersSampleWX

看起来像这样:

FingersSampleWX screenshot

按照此应用程序的源代码作为指导,我能够组装这段代码,应该做我想做的,或者我相信:

#include <iostream>
#include <NLicensing.hpp>
#include <NMedia.hpp>
#include <NBiometrics.hpp>

using namespace Neurotec::Biometrics;
using namespace Neurotec::Images;
using namespace Neurotec::Licensing;

int main()
{
    if (NLicense::ObtainComponents("/local", "5000", "Biometrics.FingerExtraction"))
        std::wcout << L"License OK\n";
    else
        std::wcout << L"License fail\n";

    NFinger finger;
    finger.SetFileName("F:\\input\\000001\\MDT1.BMP");
    finger.SetPosition(nfpUnknown);
    finger.SetImpressionType(nfitNonliveScanPlain);

    // testing
    auto test1 = finger.GetFileName();
    auto test2 = finger.GetImage();
    auto test3 = finger.GetProcessedImage();

    NImage image(NULL);
    if (finger.GetHandle())
    {
        image = finger.GetProcessedImage();

        if (image.GetHandle())
            image.Save("F:\\output\\000001\\MDT1_out.bmp");
    }   
    NLicense::ReleaseComponents("Biometrics.FingerExtraction");
}

但是,图像不会保存。出于某种原因,行 if (image.GetHandle()) 返回 false。这就是我添加 testing 部分的原因。

使用调试器检查 test2test3 的值告诉我:

handle=0x00000000 isDisposed=false

GetProcessedImage()返回NULL,这很奇怪,因为test1返回的是手指的文件名> 正确反对。我确定遗漏了一些东西......现在已经为此苦苦挣扎了几个小时。

VeriFinger 是 available as a 30-day trial (700MB)。 SDK 文档以 CHM 和 PDF 格式位于 Documentation 文件夹中。

谢谢。

最佳答案

通过仔细阅读示例代码和进行一些阅读,您的问题似乎是两个可能的问题之一。

要么图像不正确。我找不到比不喜欢的输入图像更多的信息,所以尝试一些不同尺寸的不同输入图像。这就是为什么我问 GetImage() 将什么输出到 test2 var 中?如果这不能正常工作,则表明您的输入图像未被点赞。

在我阅读的所有示例代码中,NFinger 实例似乎是在对 NFinger 实例执行任何操作之前添加到主题中的。我不确定这是否以某种方式修改了 NFinger 实例,因为文档似乎相当简单。查看 NSubject.hpp,它表明手指已添加到 FingersCollection,但似乎没有做更多的事情。

在“测试”部分之前,将手指代码添加到主题中:

NSubject subject;
subject.SetId("Some Unique String");
subject.GetFingers().Add(finger);

最后,失败了,查看示例代码中 m_biometricClient 变量的使用,尤其是它的初始化,m_biometricClient.SetFingersReturnProcessedImage(true) 看起来很有趣,但不是是它!您将在 FingersSampleForm.cpp 中看到相当多的初始化代码。添加手指时,客户端似乎负责通过任务注册它(参见 void FingersSampleForm::OnEnroll) 方法和 nboEnroll 的操作。

关于c++ - 无法使用 VeriFinger 保存处理过的指纹图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32918095/

相关文章:

java - 如何替换Mat图像的矩形区域

C++ 图像处理 : Uniform Smoothing Operation Makes Image Darker

mysql - scrapy中间件MySQL select的瓶颈

matlab - 分割图像中的数字 - Matlab

language-agnostic - 通过数据库(百万),指纹查找重复的视频文件?模式识别?

c# - 算术运算wpf中的上溢或下溢

c++ - 无论如何,不​​是为 DLL 显式实例化模板代码,而是以某种方式隐藏实现代码本身吗?

c++ - eclipse CDT : how to import external libraries?

c++ - 为什么在执行增量操作之前分配指针值

c++ - 如何将匿名 C++ union 与匿名结构一起使用