1.【奇技淫巧】OpenCV中Blob分析的源码两个关键技巧
2.ncnn的使用2:onnx转ncnn模型跑resnet18
3.opencv检测由人头(头发),应该怎么实现呢?
【奇技淫巧】OpenCV中Blob分析的解析两个关键技巧
在深入学习OpenCV应用开发的过程中,掌握Blob分析技巧是源码至关重要的,它能帮助我们实现灰度块对象的解析检测和分离。《OpenCV应用开发:入门、源码进阶与工程化实践》这本书为我们提供了实践指导,解析sss引导页源码特别是源码SimpleBlobDetector函数,它是解析Blob分析的核心工具。
SimpleBlobDetector函数包含一些关键特性。源码首先,解析它的源码默认参数设置和参数检查可能引发误解。函数在每次调用前都会进行断言检查,解析即使你关闭某些过滤选项,源码也必须为这些选项提供有效值,解析否则检测将无法进行。源码查看blobdetector.cpp源码可以进一步理解这个特性。
其次,值得注意的是,SimpleBlobDetector对输入图像背景有特定要求。传奇源码vc如果背景是黑色,所有参数可能无法正常工作,但官方文档并未明确指出这一点,这可能会误导初学者。因此,了解这一点对于正确使用Blob分析至关重要。
本书共章,详尽解析OpenCV开发模块,还涉及深度学习和工程化开发,easyui panel源码旨在提升读者的OpenCV开发能力。如果你希望通过学习这本书成为真正的OpenCV开发者,强烈推荐查看本书目录,其中还有专属答疑群(读者QQ群,进群暗号:OpenCV4读者),为你的学习之路提供支持。
ncnn的使用2:onnx转ncnn模型跑resnet
NCNN的使用教程:将ONNX模型转换为运行ResNet
NCNN提供了强大的模型转换工具,便于将Caffe、ONNX等模型转换为ncnn格式。木叶传说源码在编译后的ncnn build/tools目录下,我们找到了onnx2ncnn工具。本文将展示如何使用它将PyTorch导出的ResNet的ONNX模型转换为ncnn适用的模型。
项目的结构如下:src存放源代码,python包含脚本,model_param存放模型文件,image存放推理,bin存放可执行文件。在bin目录下,刮刮卡源码生成我们拷贝了来自ncnn/build/tools/onnx的onnx2ncnn工具。
在python脚本export_res.py中,通过给定示例输入,我们导出resnet的ONNX模型至model_param目录。然后,我们使用ncnn官方提供的工具onnx2ncnn进行转换,生成resnet.param和resnet.bin文件,分别存储模型结构和参数。
resnet.param文件包含(magic number)和层与blob的数量,其中blob用于存储中间数据。Blob的数量通常比层多,因为每个层可能有多个输入和输出。例如,Convolution层有输入和输出blob,而Split算子则有多个输入和输出。
在推理代码中,我们参考ncnn/examples/squeezenet.cpp编写,首先创建Net实例,加载模型参数(resnet.param和resnet.bin),并确保输入转换为RGB格式,因为OpenCV默认为BGR。此外,还需对进行归一化处理,以适应模型的输入要求。
CMakeLists.txt文件中,我们设置了ncnn库的搜索路径,并将可执行文件输出到bin目录下,同时链接ncnn和OpenCV库。
通过以上步骤,你已经学会了如何使用ncnn将ONNX格式的ResNet模型转换并进行推理。
opencv检测由人头(头发),应该怎么实现呢?
最简单的办法:
1. 滤波- 去噪
2. 二值化 - 可以根据直方图,提取头部图像,不过这个时候肯定还有其他的噪声
3. 形态学分析- 强化头部图像的特征
3. Blob分析- 分析头部图像的特征数据 做一个模式匹配
4. 输出人头的数量,位置等参数