opencv系列之机器学习(ml)

(版本为3.4.0)

opencv官方api文档:https://docs.opencv.org/

ml模块的svm操作:

python版本

1、生成训练数据

训练文件分别以类标签为文件名,里面存放对应的类文件

def generate_data(self,file_dir):
    train_data= []
    train_labels = []
    if os.path.exists(file_dir):
        file_list = os.listdir(file_dir)
        for fl in file_list:
            class_dir = os.path.join(file_dir,fl)
            if os.path.isdir(class_dir):
                filenames = os.listdir(class_dir)
                for f in filenames: 
                img_name = os.path.join(class_dir,f)
                img = cv2.imread(img_name)
                img = cv2.resize(img,self.resize,interpolation=cv2.INTER_CUBIC)
                new_img = img.reshape((1,self.resize[0]*self.resize[1]*3))
                train_data.append(new_img[0])
                train_labels .append(int(fl))
    return (train_data,train_labels )
    

2、训练

def svmtrain(train_data,train_labels):
        # 创建分类器  
        svm = cv2.ml.SVM_create()  
        svm.setType(cv2.ml.SVM_C_SVC)  # SVM类型  
        svm.setKernel(cv2.ml.SVM_LINEAR) # 使用线性核  
        svm.setC(1.0)  
        train = np.array(train_data,np.float32)
        train_labels = np.array(train_labels,np.int32)
        train_labels = train_labels.reshape((train_labels.size,1))
        # 训练  
        ret = svm.train(train, cv2.ml.ROW_SAMPLE, train_labels) 
        svm.save("svm_data.dat")

3、测试

 def svmtest(model_path,test_file,resize):
        svm = cv2.ml.SVM_load(model_path)
        test_data = []
        img = cv2.imread(test_file)
        img = cv2.res
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个开源的计算机视觉库,它提供了许多用于图像处理和机器学习的功能。在OpenCV中,有一些机器学习算法可以用于分类、回归和聚类等任务。这些算法包括支持向量机(SVM)、决策树、随机森林等。 要使用OpenCV进行机器学习,首先需要准备好训练数据和测试数据。可以使用`getTrainSample()`和`getTestSamples()`方法来分割数据集。然后,可以选择适当的机器学习算法,并使用训练数据对模型进行训练。训练完成后,可以使用测试数据对模型进行评估。 以下是一个使用OpenCV进行机器学习的示例代码: ```python import cv2 import numpy as np # 准备训练数据和标签 train_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float32) labels = np.array([0, 1, 1, 0], dtype=np.float32) # 创建支持向量机模型 svm = cv2.ml.SVM_create() svm.setType(cv2.ml.SVM_C_SVC) svm.setKernel(cv2.ml.SVM_LINEAR) # 训练模型 svm.train(train_data, cv2.ml.ROW_SAMPLE, labels) # 准备测试数据 test_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float32) # 使用模型进行预测 _, results = svm.predict(test_data) # 打印预测结果 print("Predictions:", results.flatten()) ``` 这个示例使用支持向量机(SVM)算法对一个简单的二分类问题进行训练和预测。训练数据是一个包含4个样本的二维数组,标签是对应的类别。模型训练完成后,使用相同的测试数据进行预测,并打印预测结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值