WIN7下利用OPENCV自带的分类器训练XML文件

本文详细介绍了如何使用OpenCV 3.4.1版本的opencv_createsamples.exe和opencv_traincascade.exe创建级联分类器。从环境配置、样本准备、样本处理到训练xml文件的全过程,包括正负样本的获取、样本处理命令、生成vec文件及训练参数设置。

一.环境

  1. QT5.14
  2. OpenCv 4.2.0

训练器使用的是OpenCV-3.4.1-x64版本的opencv_createsamples.exe和opencv_traincascade.exe文件。
高版本去除了这两个文件,有些低版本使用的时候会出现”应用程序无法正常启动(0xc000007b)。“的错误。(我之前使用OpenCv-3.3.1的时候就出现过)
下载链接:https://github.com/huihut/OpenCV-MinGW-Build

或者百度云:https://pan.baidu.com/s/1QnGZcaBoyGIIgCC_CvCR5g
提取码:hr3c

下载完成后,到对应路径的文件夹下找到bin文件夹,双击直接运行opencv_createsamples.exe和opencv_traincascade.exe这两个文件。要是没有弹出错误窗口的话就说明可以使用。
我的路径是这样子的D:\OpenCv\OpenCV-MinGW-Build-OpenCV-3.4.1-x64\x64\mingw\bin。

不能使用的话只能换其他低的版本。要是可以使用,就将bin文件夹的路径添加到环境变量(不会请百度),添加环境变量后就能在其他地方使用这两个exe文件了。
将opencv_createsamples.exe和opencv_traincascade.exe两个文件复制到一个新的文件夹中。改变了环境变量后一般需要重启。
在这里插入图片描述
二.样本准备
正样本(需要识别的物体)
负样本(不包含需要识别的物体的照片)
正样本需要同样大小,并且为灰度图;负样本只需要为灰度图即可。
在刚才的文件夹中建立pos、neg、xml三个文件夹,分别用于存放正样本、负样本和训练出来的xml文件。
在这里插入图片描述
我的正样本是使用电脑摄像头拍摄,然后opencv处理成8080大小的灰度图;负样本是使用手机的相册照片,经过opencv处理成500500的灰度图。

我的简单的处理代码如下:

Point pt(45,45);
int flag_neg = 0;   // 0 是80*80正样本,1 是负样本, 2 为自动从目录中读取
void on_mouse( int event, int x, int y, int , void* )//鼠标的回调函数
{
   
   
    if(event == EVENT_LBUTTONUP      )
    {
   
   
        pt.x = x;
        pt.y = y;
        //cvCircle( src, pt, 2,cvScalar(255,0,0,0) ,CV_FILLED, CV_AA, 0 );
    }
}

int main(int argc, char *argv[])
{
   
   
    readTemplate();
    tryFindresule();

    VideoCapture v(0);  //默认分辨率640*480
//    v.set(CAP_PROP_FRAME_WIDTH, 1280.0);    //设置分辨率
将你的程序从使用 **Emgu.CV** 改为使用 **OpenCV(即 OpenCV 的官方 C++ 或 Python 版本,或 C# 的 OpenCvSharp、OpenCV 的 C# 封装)**,是一个常见的需求,尤其是当你遇到 Emgu.CV 的部署问题(如 dll 加载失败)时。 --- ## ✅ 推荐方案:使用 **OpenCvSharp4**(适用于 C#/.NET) OpenCvSharp 是一个功能齐全、维护活跃的 OpenCV C# 封装库,支持: - Windows、Linux、macOS - .NET Framework、.NET Core、.NET 5/6/7/8 - x64/x86/ARM64 --- ## ✅ 步骤 1:安装 OpenCvSharp4 你可以通过 NuGet 安装以下包: ```bash Install-Package OpenCvSharp4 Install-Package OpenCvSharp4.runtime.win ``` > `OpenCvSharp4.runtime.win` 包含了 OpenCV 的 native dll,适用于 Windows 平台。 --- ## ✅ 步骤 2:设置项目平台为 x64 右键项目 → 属性 → Build → 设置 **Platform target** 为 `x64` --- ## ✅ 步骤 3:替换 Emgu.CV 代码为 OpenCvSharp 代码 ### ✅ 示例对比 #### Emgu.CV 原始代码: ```csharp using Emgu.CV; using Emgu.CV.CvEnum; class Program { static void Main() { Mat img = CvInvoke.Imread("test.jpg", ImreadModes.Color); CvInvoke.Imshow("Image", img); CvInvoke.WaitKey(0); } } ``` #### 替换为 OpenCvSharp4: ```csharp using OpenCvSharp; class Program { static void Main() { // 读取图像 Mat img = Cv2.ImRead("test.jpg", ImreadModes.Color); // 显示图像 Cv2.NamedWindow("Image"); Cv2.ImShow("Image", img); // 等待按键 Cv2.WaitKey(0); Cv2.DestroyAllWindows(); } } ``` --- ## ✅ OpenCvSharp4 常用功能对照表(Emgu.CV → OpenCvSharp) | Emgu.CV | OpenCvSharp4 | |---------|---------------| | `Mat` | `Mat` | | `CvInvoke.Imread()` | `Cv2.ImRead()` | | `CvInvoke.Imshow()` | `Cv2.ImShow()` | | `CvInvoke.WaitKey()` | `Cv2.WaitKey()` | | `CvInvoke.CvtColor()` | `Cv2.CvtColor()` | | `CvInvoke.GaussianBlur()` | `Cv2.GaussianBlur()` | | `CvInvoke.Threshold()` | `Cv2.Threshold()` | | `CvInvoke.FindContours()` | `Cv2.FindContours()` | --- ## ✅ OpenCvSharp4 的优势 - **无需手动部署 dll**(通过 `OpenCvSharp4.runtime.win` 自动复制) - **跨平台兼容性好** - **文档和社区活跃** - **与 OpenCV 官方接口保持同步** --- ## ✅ OpenCvSharp4 安装注意事项 - 确保你安装了正确的 `runtime` 包(如 `OpenCvSharp4.runtime.win`) - 如果你使用的是 ARM64 Windows,可安装 `OpenCvSharp4.runtime.win-arm64` - 不需要额外安装 VC++ 运行库(因为 runtime 包自带) --- ## ✅ 示例:使用 OpenCvSharp4 进行人脸检测 ```csharp using OpenCvSharp; class Program { static void Main() { // 加载级联分类器 var faceCascade = new CascadeClassifier("haarcascade_frontalface_default.xml"); // 读取图像 Mat img = Cv2.ImRead("test.jpg", ImreadModes.Color); Mat gray = new Mat(); Cv2.CvtColor(img, gray, ColorConversionCodes.BGR2GRAY); // 检测人脸 Rect[] faces = faceCascade.DetectMultiScale(gray, 1.1, 3); foreach (var face in faces) { Cv2.Rectangle(img, face, Scalar.Red, 2); } // 显示结果 Cv2.ImShow("Detected Faces", img); Cv2.WaitKey(0); } } ``` --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值