opencv 画轮廓
1、读取图片
2、转为灰度图片
3、滤波降噪
4、二值化
5、形态学处理,开闭运算,腐蚀填充
6、画轮廓,外接矩形,计算面积等
基于4.0.9.80 opencv版本
import cv2 as cv import numpy as np def show(img, title): cv.imshow(title, img) cv.waitKey() cv.destroyAllWindows() image = cv.imread('./image_cn_web/luomao.png') image_gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # 灰度图 image_blur = cv.GaussianBlur(image_gray, (25, 25), 0, 0) # 过滤降噪 # show(image_blur, '过滤降噪') # 二值化 img_bin = cv.adaptiveThreshold(image_blur, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY_INV, blockSize=35, C=2) show(img_bin, '二值化') # 形态学处理 kernel = np.ones((3, 3), np.uint8) img_bin_open = cv.morphologyEx(img_bin, cv.MORPH_OPEN, kernel) # 开运算 show(img_bin_open, '开运算') kernel = np.ones((25, 25), np.uint8) img_bin_close = cv.morphologyEx(img_bin_open, cv.MORPH_CLOSE, kernel) # 闭运算 show(img_bin_close, '闭运算') kernel = np.ones((7, 7), np.uint8) image_bin_open = cv.morphologyEx(img_bin_close, cv.MORPH_OPEN, kernel) # 开运算 show(img_bin_open, '开运算') kernel = np.ones((25, 25), np.uint8) image_bin_close = cv.morphologyEx(image_bin_open, cv.MORPH_CLOSE, kernel) # 闭运算 show(img_bin_close, '闭运算') cnts, hierarchy = cv.findContours(image_bin_close, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) img2 = image.copy() img_withcontours = cv.drawContours(img2, cnts, -1, (0, 0, 255), 3) # cv.imshow('result', img_withcontours) # cv.waitKey() # cv.destroyAllWindows()
Please call me JiangYouDang!