model.train(data, cv2.ml.ROW_SAMPLE, target, criteria=criteria) cv2.error: OpenCV(4.5.4-dev) :-1: error: (-5:Bad argument) in function 'train' > Overload resolution failed: > - ml_StatModel.train() takes at most 2 arguments (4 given) > - ml_StatModel.train() takes at most 3 arguments (4 given) > - ml_StatModel.train() takes at most 3 arguments (4 given)
时间: 2024-03-30 10:40:26 浏览: 166
这个错误提示是在使用OpenCV的ml模块中的train方法时出现的。它说你的参数数量不匹配,train方法最多只接受2个或3个参数,但你提供了4个参数。
具体而言,train方法的参数应该是:
- samples: 样本数据,numpy数组格式
- layout: 样本数据的布局,有两个可选值:cv2.ml.ROW_SAMPLE和cv2.ml.COL_SAMPLE
- responses: 样本数据对应的标签,numpy数组格式
- *args: 可选参数,比如训练算法的终止准则等
你需要检查一下你的代码,看看是否正确传递了这些参数。如果有问题,可以尝试按照正确的方式调整参数传递方式。
相关问题
Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Worksheets("Sheet1") '清除格式和删除行列 ws.Cells.ClearFormats ws.Range("1:2").Delete Shift:=xlUp ws.Range("A:A,B:B,C:C,F:F,G:G,I:I,J:J,K:K,M:M,P:P,Q:Q,S:S,T:T").Delete Shift:=xlToLeft '添加新列 ws.Range("H1").Value = "回收时间" ws.Range("K1").Value = "回收人" ws.Range("L1").Value = "复核人" ws.Columns("E:E").Copy Destination:=ws.Columns("I:I") ws.Columns("F:F").Copy Destination:=ws.Columns("J:J") '筛选数据 ws.Range("A:D").AutoFilter ws.Range("A:D").AutoFilter Field:=1, Criteria1:="<>tt", VisibleDropDown:=False ws.Range("A:D").AutoFilter Field:=2, Criteria1:="<>996999", VisibleDropDown:=False ws.Range("A:D").AutoFilter Field:=3, Criteria1:="<>996999", VisibleDropDown:=False ws.Range("A:D").AutoFilter Field:=4, Criteria1:="<>*贴", Operator:=xlAnd, Criteria2:="<>*片", VisibleDropDown:=False '排序数据 With ws.Sort .SortFields.Clear .SortFields.Add2 Key:=ws.Range("A2:A500"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange ws.Range("A1:L500") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With With ActiveSheet .Columns.AutoFit .Rows.AutoFit .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove End With '合并单元格 With ws.Range("A1:L1") .Merge .Value = "yyy" End With '调整列宽 ws.Columns("B:B").ColumnWidth = 7.5 ws.Columns("E:E,I:I").ColumnWidth = 3.08 End Sub 改进
Sub UpdateData()
Dim ws As Worksheet
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
'清除格式和删除行列
With ws
.Cells.ClearFormats
.Range("1:2").Delete Shift:=xlUp
.Range("A:A,B:B,C:C,F:F,G:G,I:I,J:J,K:K,M:M,P:P,Q:Q,S:S,T:T").Delete Shift:=xlToLeft
'添加新列
.Range("H1").Value = "回收时间"
.Range("K1").Value = "回收人"
.Range("L1").Value = "复核人"
'复制列
.Columns("E:E").Copy Destination:=.Columns("I:I")
.Columns("F:F").Copy Destination:=.Columns("J:J")
'筛选数据
.Range("A:D").AutoFilter
.Range("A:D").AutoFilter Field:=1, Criteria1:="<>tt", VisibleDropDown:=False
.Range("A:D").AutoFilter Field:=2, Criteria1:="<>996999", VisibleDropDown:=False
.Range("A:D").AutoFilter Field:=3, Criteria1:="<>996999", VisibleDropDown:=False
.Range("A:D").AutoFilter Field:=4, Criteria1:="<>*贴", Operator:=xlAnd, Criteria2:="<>*片", VisibleDropDown:=False
'排序数据
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
With .Sort
.SortFields.Clear
.SortFields.Add Key:=ws.Range("A2:A" & lastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange ws.Range("A1:L" & lastRow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'合并单元格
.Range("A1:L1").Merge
.Range("A1").Value = "yyy"
'调整列宽
.Columns("B:B").ColumnWidth = 7.5
.Columns("E:E,I:I").ColumnWidth = 3.08
'调整行高和列宽
.Cells.EntireRow.AutoFit
.Columns.AutoFit
'插入空白行
.Rows("1:3").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End With
End Sub
If Weekday(Date, vbMonday) <> 5 Then If Day(Date) = 3 Then ws.Range("B1").AutoFilter Field:=2, Criteria1:="<>*る*", Operator:=xlAnd, Criteria2:="<>砞称-*" Else ws.Range("B1").AutoFilter Field:=2, Criteria1:="<>*砞称-*", Operator:=xlAnd, Criteria2:="<>*る*" End If End If
这段代码会根据日期和星期几来应用自动过滤器。如果日期不是星期五,那么它将检查日期是否为3号,并根据结果应用过滤器。如果日期为3号,则应用一个过滤器,如果日期不是3号,则应用另一个过滤器。
如果您想要修改代码,使其筛选出包含“る”的数据,可以将 `Criteria1` 修改为 `"=*る*"`。如果您想要同时筛选出不包含“砞称-” 的数据,则可以将 `Criteria2` 修改为 `"<>*砞称-*"`。修改后的代码如下所示:
```
If Weekday(Date, vbMonday) <> 5 Then
If Day(Date) = 3 Then
ws.Range("B1").AutoFilter Field:=2, Criteria1:="=*る*", Operator:=xlAnd, Criteria2:="<>*砞称-*"
Else
ws.Range("B1").AutoFilter Field:=2, Criteria1:="<>*砞称-*", Operator:=xlAnd, Criteria2:="=*る*"
End If
End If
```
这将在日期不是星期五时,筛选出包含“る”但不包含“砞称-” 的数据;在日期为3号时,筛选出包含“る”且不包含“砞称-” 的数据。
阅读全文