在计算机视觉中,轮廓检测是一个比较重要的任务
还有一些相关的操作:计算多边形边界、形态逼近和计算感兴趣区域,后面再慢慢研究。。。
先来初步尝试下轮廓检测
检测前,先对图像进行处理
- 图像二值化
图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。
-
threshold 固定阈值二值化
def threshold(src, thresh, maxval, type, dst=None)
其中:
src: 输入图,只能输入单通道图像,通常来说为灰度图
thresh:设定的阈值
maxval: 当灰度值大于或小于阈值时,将灰度值赋成的值
type: 二值化的方式
可以有的方式有:
cv2.THRESH_BINARY = 0 大于阈值的部分被置为255,小于部分被置为0
cv2.THRESH_BINARY_INV = 1 大于阈值部分被置为0,小于部分被置为255
cv2.THRESH_MASK = 7
cv2.THRESH_OTSU = 8
cv2.THRESH_TOZERO = 3 小于阈值部分被置为0,大于部分保持不变
cv2.THRESH_TOZERO_INV = 4 大于阈值部分被置为0,小于部分保持不变
cv2.THRESH_TRIANGLE = 16
cv2.THRESH_TRUNC = 2 大于阈值部分被置为thresh,小于部分保持原样
看看有些啥效果。。。
import cv2
import matplotlib.pyplot as plt
#灰度读取
img = cv2.imread('img/Lena.jpg', cv2.IMREAD_GRAYSCALE)
ret, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img, 127, 255,