| name | image-processing |
| description | OpenCV4 图像处理技能 - 几何变换、滤波、形态学、阈值处理、边缘检测 |
| user-invocable | true |
| argument-hint | 图像处理 OR 滤波 OR 形态学 OR 边缘检测 OR 几何变换 |
OpenCV4 Image Processing Skill
图像处理完整指南
何时使用
当需要以下帮助时使用此技能:
- 图像几何变换(缩放、旋转、仿射)
- 滤波和模糊操作
- 形态学操作(开、闭、膨胀、腐蚀)
- 阈值处理和分割
- 边缘检测和轮廓提取
快速参考
几何变换
import cv2
import numpy as np
resized = cv2.resize(img, (width, height))
resized = cv2.resize(img, None, fx=0.5, fy=0.5)
(h, w) = img.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, 45, 1.0)
rotated = cv2.warpAffine(img, M, (w, h))
pts1 = np.float32([[50,50], [200,50], [50,200]])
pts2 = np.float32([[10,100], [200,50], [100,250]])
M = cv2.getAffineTransform(pts1, pts2)
warped = cv2.warpAffine(img, M, (w, h))
pts1 = np.float32([[0,0], [300,0], [0,300], [300,300]])
pts2 = np.float32([[0,0], [300,0], [150,300], [150,0]])
M = cv2.getPerspectiveTransform(pts1, pts2)
result = cv2.warpPerspective(img, M, (300, 300))
滤波操作
blur = cv2.blur(img, (5,5))
gaussian = cv2.GaussianBlur(img, (5,5), 0)
median = cv2.medianBlur(img, 5)
bilateral = cv2.bilateralFilter(img, 9, 75, 75)
kernel = np.ones((5,5), np.float32) / 25
convolved = cv2.filter2D(img, -1, kernel)
形态学操作
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
eroded = cv2.erode(img, kernel, iterations=1)
dilated = cv2.dilate(img, kernel, iterations=1)
opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
closed = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
阈值处理
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
adaptive_thresh = cv2.adaptiveThreshold(gray, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
_, otsu = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
边缘检测与轮廓
edges = cv2.Canny(img, 50, 150)
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
sobel = cv2.bitwise_or(sobelx, sobely)
laplacian = cv2.Laplacian(img, cv2.CV_64F)
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,255,0), 2)
C++ 实现
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc.hpp>
using namespace cv;
Mat rotate(const Mat& img, double angle) {
Point2f center(img.cols/2.0, img.rows/2.0);
Mat M = getRotationMatrix2D(center, angle, 1.0);
Mat rotated;
warpAffine(img, rotated, M, img.size());
return rotated;
}
Mat gaussianBlur(const Mat& img, int ksize, double sigma) {
Mat blurred;
GaussianBlur(img, blurred, Size(ksize, ksize), sigma);
return blurred;
}
Mat cannyEdge(const Mat& img, double t1, double t2) {
Mat edges;
Canny(img, edges, t1, t2);
return edges;
}
最佳实践
-
滤波选择:
- 去噪:
bilateralFilter > GaussianBlur > medianBlur
- 边缘保护:
bilateralFilter
- 实时处理:
boxFilter with normalization
-
形态学结构元素:
MORPH_RECT - 矩形
MORPH_ELLIPSE - 椭圆
MORPH_CROSS - 十字
-
边缘检测参数:
- 低阈值:捕获弱边缘
- 高阈值:确定强边缘
- 推荐比例:低:高 = 1:2 或 1:3
相关技能