本文整理了100个OpenCV实用技巧,涵盖图像处理各个领域,助你轻松掌握计算机视觉核心技能!
import cv2
# 读取图像(BGR格式)
img = cv2.imread('image.jpg')
# 显示图像
cv2.imshow('示例图片', img)
cv2.waitKey(0) # 按任意键退出
cv2.destroyAllWindows()
# 保存图像
cv2.imwrite('output.jpg', img)
# BGR转灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# BGR转HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 缩放图像
resized = cv2.resize(img, (new_width, new_height))
# 图像翻转
flipped_h = cv2.flip(img, 1) # 水平翻转
flipped_v = cv2.flip(img, 0) # 垂直翻转
# 图像裁剪
cropped = img[y:y+h, x:x+w]
# 图像旋转
M = cv2.getRotationMatrix2D((center_x, center_y), 45, 1.0)
rotated = cv2.warpAffine(img, M, (w, h))
# 高斯模糊
blurred = cv2.GaussianBlur(img, (15, 15), 0)
# 中值滤波(椒盐噪声克星)
median = cv2.medianBlur(img, 5)
# 双边滤波(保留边缘)
bilateral = cv2.bilateralFilter(img, 9, 75, 75)
# Canny边缘检测
edges = cv2.Canny(img, 100, 200)
# Sobel算子
sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=5)
# 全局阈值
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 自适应阈值
adaptive = cv2.adaptiveThreshold(
gray, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2
)
# 查找轮廓
contours, _ = cv2.findContours(
edges,
cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE
)
# 绘制轮廓
result = img.copy()
cv2.drawContours(result, contours, -1, (0,255,0), 2)
# 计算轮廓面积
area = cv2.contourArea(contours[0])
# ORB特征点检测
orb = cv2.ORB_create()
keypoints = orb.detect(gray, None)
# 绘制特征点
img_kp = cv2.drawKeypoints(
img, keypoints, None,
flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS
)
# 单对象匹配
result = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
top_left = max_loc
# 凸包检测
hull = cv2.convexHull(contours[0])
cv2.drawContours(img, [hull], 0, (0,0,255), 2)
# 最小外接圆
(x,y), radius = cv2.minEnclosingCircle(contours[0])
cv2.circle(img, (int(x),int(y)), int(radius), (255,0,0), 2)
# 颜色直方图
hist = cv2.calcHist([img], [0], None, [256], [0,256])
# 提取特定颜色范围(如蓝色)
lower_blue = np.array([100, 50, 50])
upper_blue = np.array([140, 255, 255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 分水岭算法
markers = cv2.watershed(img, markers)
img[markers == -1] = [255,0,0] # 标记边界
# GrabCut交互式分割
mask = np.zeros(img.shape[:2], np.uint8)
rect = (50,50,450,290)
cv2.grabCut(img, mask, rect, None, None, 5, cv2.GC_INIT_WITH_RECT)
# 加载预训练模型
face_cascade = cv2.CascadeClassifier(
cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
)
# 人脸检测
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 绘制检测框
for (x,y,w,h) in faces:
cv2.rectangle(img, (x,y), (x+w, y+h), (255,0,0), 2)
# 创建破损区域的掩码
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:200, 100:200] = 255
# 图像修复
restored = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
# 虚拟物体叠加
virtual_img = cv2.imread('virtual_object.png', cv2.IMREAD_UNCHANGED)
# 获取透视变换矩阵
M = cv2.getPerspectiveTransform(pts1, pts2)
result = cv2.warpPerspective(
virtual_img, M, (img.shape[1], img.shape[0]),
borderMode=cv2.BORDER_TRANSPARENT
)
分类 | 数量 | 功能示例 |
---|---|---|
基础操作 | 10项 | 读写图像、格式转换、旋转裁剪等 |
图像处理 | 20项 | 模糊去噪、边缘检测、形态学操作等 |
色彩处理 | 10项 | 颜色分离、阈值处理、直方图均衡等 |
特征提取 | 15项 | 角点检测、特征描述、轮廓分析等 |
图像变换 | 15项 | 仿射变换、透视校正、图像拼接等 |
分析识别 | 15项 | 形状分析、对象检测、模板匹配等 |
实用应用 | 15项 | 人脸识别、图像修复、AR增强等 |
关注我们并回复【OpenCV100】,后续整理更多实用教程!
如何高效学习这些技巧?
1️⃣ 由浅入深学习:从基础操作开始,掌握后再转向高级功能
2️⃣ 项目驱动实践:结合车牌识别、缺陷检测等实际项目
3️⃣ 官方文档辅助:opencv.org/documentation 是权威参考资料
立即动手尝试这些强大的图像处理功能吧!在评论区分享你的OpenCV项目经验或学习问题,我们会选择典型问题进行解答~
欢迎扫码关注获取更多计算机视觉干货
#OpenCV #计算机视觉 #图像处理 #Python编程 #人工智能