cv2.chain_approx_none
时间: 2023-04-21 17:06:42 浏览: 41
cv2.chain_approx_none是OpenCV中的一个函数,用于轮廓近似。它的作用是将轮廓中的点进行抽稀,从而减少点的数量,使得轮廓更加平滑。其中,参数none表示不进行近似,即保留所有的点。
相关问题
cv2.CHAIN_APPROX_NONE,有什么作用
### 回答1:
cv2.CHAIN_APPROX_NONE 是一个参数,用于轮廓近似方法 cv2.findContours() 函数中。它表示找到的轮廓保留所有的边界点,这意味着轮廓周长是准确的。这与另一个轮廓近似方法 cv2.CHAIN_APPROX_SIMPLE 不同,它会将所有水平、垂直和对角直线段缩减为单个点,以减少轮廓的数量。
所以,在使用 cv2.CHAIN_APPROX_NONE 时,会找到轮廓周长的准确值,并保留所有的边界点。
### 回答2:
cv2.CHAIN_APPROX_NONE是OpenCV中findContours()函数的一个参数,用于指定轮廓的近似方法。
在图像处理中,轮廓是图像中物体边缘的连续曲线。findContours()函数通过分析图像中的像素点来找到物体的轮廓。这个函数的第一个返回值是轮廓的列表,而第二个返回值是每个轮廓的绘制层级信息。
cv2.CHAIN_APPROX_NONE表示不使用近似方法,即找到的轮廓会完整地保存每个像素点,不进行任何近似。这种方法会得到非常准确的轮廓,但会导致轮廓点的数量非常多,给后续处理和存储带来困难。因此,如果只需要绘制轮廓或计算轮廓的面积,可以使用cv2.CHAIN_APPROX_NONE。
总结来说,cv2.CHAIN_APPROX_NONE的作用是在图像处理中获取物体轮廓时能够得到准确的轮廓信息,但会导致轮廓点的数量较多。
contours4,hierarchy4 = cv2.findContours(mask_white, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
这段代码使用OpenCV库中的findContours函数来检测二值图像中的轮廓(contours)。其中,findContours函数的输入参数为二值图像,第二个参数为轮廓检索模式,RETR_EXTERNAL表示仅检测外层轮廓;第三个参数为轮廓逼近方法,CHAIN_APPROX_NONE表示不对轮廓进行逼近处理。函数的返回值为一个元组,包含两个值,第一个值contours4是一个列表,包含了检测到的所有轮廓,每一个轮廓又是一个包含了轮廓上所有点的numpy数组;第二个值hierarchy4也是一个numpy数组,包含了每个轮廓的拓扑结构信息,可以用来判断轮廓的相对位置关系。
范例中使用的是mask_white二值图像,所以findContours函数检测的是mask_white图像中的所有白色区域的外层轮廓。可以使用以下代码展示轮廓检测的效果:
``` python
import cv2
import numpy as np
img = cv2.imread("image.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, mask_white = cv2.threshold(gray, 220, 255, cv2.THRESH_BINARY)
contours4, hierarchy4 = cv2.findContours(mask_white, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(img, contours4, -1, (0, 0, 255), 2)
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
运行以上代码,可以查看原图中所有白色区域的外层轮廓。