AttributeError:module 'cv2' has no attribute 'SNAKE_ELASTIC_NET'
时间: 2023-10-04 20:11:48 浏览: 162
抱歉,上面的代码在 OpenCV 3.4.2 版本及以下中是可行的,但在更高版本的 OpenCV 中可能会出现 'cv2' 没有属性 'SNAKE_ELASTIC_NET' 的错误。
为了解决这个问题,你可以使用 cv2.snake_image() 函数替换 cv2.cv.SnakeImage() 函数,并将模式参数 'SNAKE_ELASTIC_NET' 替换为 0。同时,你还需要将轮廓控制点的类型从 contours[0] 更改为 contours[0][:, 0, :]。
下面是修改后的代码示例:
```python
import cv2
# 读取图像
img = cv2.imread('lena.jpg')
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 50, 150)
# 寻找轮廓
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 获取轮廓控制点
points = contours[0][:, 0, :]
# 设置参数
alpha = 0.1
beta = 0.1
gamma = 0.1
kappa = 2.0
iterations = 200
mode = 0
p = cv2.TERM_CRITERIA_ITER | cv2.TERM_CRITERIA_EPS
criteria = (p, iterations, 0.1)
# 进行轮廓优化
cv2.snake_image(points, alpha, beta, gamma, kappa, mode, criteria, 0)
# 画出轮廓线
cv2.drawContours(img, [points], -1, (0, 0, 255), 2)
# 显示结果
cv2.imshow('image', img)
cv2.waitKey(0)
```
这个例子和之前的例子非常相似,主要区别在于使用 cv2.snake_image() 函数替换 cv2.cv.SnakeImage() 函数,并将模式参数 'SNAKE_ELASTIC_NET' 替换为 0。同时,我们将轮廓控制点的类型从 contours[0] 更改为 contours[0][:, 0, :]。
阅读全文