pencvsharp4.5 编写 优化TermCriteria termCriteria = new TermCriteria(CriteriaType.Count | CriteriaType.Eps, 100, 0.001);
时间: 2023-12-10 11:40:09 浏览: 24
TermCriteria 是 OpenCV 中用于迭代优化算法的类,可以控制算法的停止条件。在 C# 中使用 OpenCvSharp4.5,可以通过以下方式创建一个 TermCriteria 对象:
```csharp
TermCriteria termCriteria = new TermCriteria(CriteriaType.Count | CriteriaType.Eps, 100, 0.001);
```
其中,第一个参数 CriteriaType 表示停止条件的类型,可以使用 Count 或 Eps 分别表示迭代次数或精度误差。第二个参数 100 表示最大迭代次数,第三个参数 0.001 表示精度误差值。这个 TermCriteria 对象的含义是:当迭代次数达到 100 次或精度误差小于 0.001 时,优化算法停止迭代。
需要注意的是,TermCriteria 的第一个参数也可以使用 MaxIter 来表示迭代次数,使用 Eps 来表示精度误差。所以上面的代码也可以写成:
```csharp
TermCriteria termCriteria = new TermCriteria(CriteriaType.MaxIter | CriteriaType.Eps, 100, 0.001);
```
这两种写法的效果是相同的。
相关问题
const count = computed(() => store.state.count); store.state.count如何赋值
`store.state.count` 是 Vuex 中的一个状态,可以使用 `store.commit()` 方法来改变它的值。
例如,如果要将 `store.state.count` 的值增加1,可以这样做:
```
store.commit('increment');
```
在 Vuex 中,mutations 是唯一允许修改状态的地方,因此需要在 mutations 中定义一个名为 `increment` 的方法来实现对 `store.state.count` 的修改。示例代码如下:
```
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
}
});
```
在上面的代码中,`state.count` 的初始值为0,`increment` 方法会将 `state.count` 的值加1。通过调用 `store.commit('increment')` 方法,就能触发状态的改变。
public Point2f FindSubPixelExtremePoint(Mat<float> image, bool white2black) { const float maxVal = 255f; const MinMaxLocResult searchDirection = white2black ? MinMaxLocResult.Min : MinMaxLocResult.Max; if (image == null) { throw new ArgumentNullException(nameof(image)); } Point2f minLoc, maxLoc; double minVal, maxVal; Cv2.MinMaxLoc(image, out minVal, out maxVal, out minLoc, out maxLoc); var criteria = new TermCriteria(TermCriteria.Eps | TermCriteria.Count, 20, 0.03); Cv2.CornerSubPix(image, new[] { minLoc, maxLoc }, new Size(3, 3), new Size(-1, -1), criteria); return searchDirection == MinMaxLocResult.Min ? minLoc : maxLoc; } 进行预处理,去除干扰点 返回亚像素点,请优化代码,生成新的函数
public Point2f FindSubPixelExtremePoint(Mat<float> image, bool white2black) {
if (image == null) {
throw new ArgumentNullException(nameof(image));
}
Point2f extremaLoc;
double extremaVal;
Cv2.MinMaxLoc(image, out double minVal, out double maxVal, out Point2f minLoc, out Point2f maxLoc);
if (white2black) {
extremaVal = minVal;
extremaLoc = minLoc;
} else {
extremaVal = maxVal;
extremaLoc = maxLoc;
}
var criteria = new TermCriteria(TermCriteria.Eps | TermCriteria.Count, 20, 0.03);
Cv2.CornerSubPix(image, new[] { extremaLoc }, new Size(3, 3), new Size(-1, -1), criteria);
return extremaLoc;
}
优化后的代码,去除了重复的代码,将最小值和最大值的判断统一为一个变量,同时只对最终的极值点进行了亚像素处理,避免了处理过多的干扰点。