本文共 1805 字,大约阅读时间需要 6 分钟。
OpenCV 是一个强大的图像处理库,其 cv2.drawContours 方法可以用来绘制图像轮廓。本文将介绍如何使用 OpenCV 进行轮廓绘制,包括基本步骤和代码示例。
导入 OpenCV
首先需要安装 OpenCV 库并导入它。import cv2
读取图片
使用cv2.imread 读取图片文件。img = cv2.imread('input.jpg')获取轮廓
使用cv2.findContours 方法获取图片中的轮廓。gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
绘制轮廓
使用cv2.drawContours 方法在图片上绘制轮廓。cv2.drawContours(img, contours, -1, (0, 255, 0), 3)
显示或保存结果
最后可以选择在屏幕上显示图片或将其保存为新文件。cv2.imshow('Contours', img) cv2.waitKey(0) cv2.destroyAllWindows()或者保存为新文件:
cv2.imwrite('output.jpg', img)以下是一个完整的绘制轮廓的函数示例:
import cv2def draw_contours(image_path): img = cv2.imread(image_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img, contours, -1, (0, 255, 0), 3) cv2.imshow('Contours', img) cv2.waitKey(0) cv2.destroyAllWindows() 假设你有一个名为 test_image.jpg 的图片,包含多个形状的轮廓。运行上述代码后,你将在屏幕上看到原始图片和带有轮廓的修改后的图片。
物体检测
OpenCV 提供了cv2.findContours 和 cv2.approxPolyDP 等工具,可结合机器学习算法(如 SVM 或神经网络)进行物体检测。例如,可以训练分类器识别特定形状(如圆形、矩形等)。图像分割
在图像分割中,OpenCV 提供了多种方法,包括基于轮廓的分割。通过找到连通区域并使用cv2.approxPolyDP 逼近轮廓,可以将图片分割为多个具有特定形状的区域。例如,以下是一个简单的图像分割示例:
import cv2def split_image(image_path): img = cv2.imread(image_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: epsilon = 0.01 * cv2.arcLength(contour, True) approx = cv2.approxPolyDP(contour, epsilon, True) if len(approx) == 4: x, y, w, h = cv2.boundingRect(approx) roi = img[y:y+h, x:x+w] cv2.imshow('ROI', roi) cv2.waitKey(0) 这个示例处理了近似轮廓长度为4(可能为矩形)的区域。
转载地址:http://qosfk.baihongyu.com/