import cv2 import os # 读取原始图像 image_path = 'test.jpg' image = cv2.imread(image_path) if image is None: print("无法加载图片,请确保 test.jpg 存在于项目目录中。") exit() # 创建输出文件夹 output_dir = 'processed' os.makedirs(output_dir, exist_ok=True) # 显示原始图像 cv2.imshow("Original", image) cv2.waitKey(500) # 1. 灰度化处理 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.imshow("Gray", gray_image) cv2.imwrite(os.path.join(output_dir, 'gray.jpg'), gray_image) cv2.waitKey(500) # 2. 模糊处理(高斯模糊) blur_image = cv2.GaussianBlur(image, (11, 11), 0) cv2.imshow("Blur", blur_image) cv2.imwrite(os.path.join(output_dir, 'blur.jpg'), blur_image) cv2.waitKey(500) # 3. 边缘检测(Canny) edge_image = cv2.Canny(image, 100, 200) cv2.imshow("Edges", edge_image) cv2.imwrite(os.path.join(output_dir, 'edges.jpg'), edge_image) cv2.waitKey(500) # 4. 图像旋转(顺时针45度) (h, w) = image.shape[:2] center = (w // 2, h // 2) rotate_matrix = cv2.getRotationMatrix2D(center, -45, 1.0) rotated_image = cv2.warpAffine(image, rotate_matrix, (w, h)) cv2.imshow("Rotated", rotated_image) cv2.imwrite(os.path.join(output_dir, 'rotated.jpg'), rotated_image) cv2.waitKey(500) # 5. 人脸检测(基于Haar级联分类器) face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') face_image = image.copy() gray_for_face = cv2.cvtColor(face_image, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray_for_face, scaleFactor=1.1, minNeighbors=5) for (x, y, w, h) in faces: cv2.rectangle(face_image, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow("Face Detection", face_image) cv2.imwrite(os.path.join(output_dir, 'faces.jpg'), face_image) cv2.waitKey(0) cv2.destroyAllWindows()
时间: 2025-08-08 12:20:42 浏览: 7
<think>好的,我现在需要帮用户整理一个关于OpenCV图像处理操作的完整代码示例,包括灰度化、高斯模糊、Canny边缘检测、图像旋转和人脸检测。首先,我需要确认用户提到的每个功能点,并确保每个步骤都有对应的代码和解释。用户提到了五个功能:灰度化、高斯模糊、边缘检测、图像旋转和人脸检测。我需要逐一处理这些。首先,灰度化,这应该是用cv2.cvtColor的COLOR_BGR2GRAY参数。然后是高斯模糊,使用cv2.GaussianBlur,需要指定核大小和sigma值。边缘检测部分,用户明确提到Canny算法,所以需要设置两个阈值,可能还需要解释如何调整这些参数。图像旋转的话,可能需要使用旋转矩阵,通过cv2.getRotationMatrix2D和cv2.warpAffine来实现。最后,人脸检测用Haar级联分类器,这需要加载预训练的模型,比如haarcascade_frontalface_default.xml,然后使用detectMultiScale方法。接下来,我需要把这些步骤整合到一个代码示例中,确保每个步骤之间有清晰的注释。同时,用户可能希望代码能够展示处理后的图像,所以每个处理后的结果应该用imshow显示出来,或者保存到不同的窗口。但要注意,如果同时显示多个窗口,可能会影响用户体验,所以可能需要合理安排窗口的显示顺序,或者使用cv2.waitKey来控制。另外,用户提供的引用中有一些代码示例,比如引用[1]和引用[4]中的人脸检测部分,还有引用[3]中的Canny边缘检测。我需要参考这些代码,确保语法正确,并且符合OpenCV的最新版本。例如,加载Haar分类器时,正确的路径可能需要通过cv2.data.haarcascades来获取,这样可以避免文件路径的问题。
还要注意,代码需要处理可能的异常,比如图像文件是否存在,分类器文件是否加载成功。但用户可能只需要一个简明的示例,所以暂时可以不加入异常处理,保持代码简洁。
图像旋转部分,用户可能需要指定旋转中心和旋转角度,比如以图像中心为原点旋转30度,这样比较直观。同时,旋转后的图像可能会超出原图范围,所以需要处理边框模式,比如用BORDER_CONSTANT填充黑色。
在编写代码时,要确保每一步都清晰,变量命名有意义。例如,gray_image表示灰度化后的图像,blurred_image表示高斯模糊后的结果,edges是边缘检测后的图像,rotated_image是旋转后的图像,最后在检测到的人脸周围画矩形。最后,生成相关问题时要围绕用户的需求,可能涉及参数调整、其他算法、性能优化、应用场景和错误处理等方面。例如,如何调整Canny的阈值,或者除了Haar分类器还有哪些人脸检测方法。现在需要将所有这些思考整合成一个结构清晰的回答,确保代码正确,注释明确,并且相关问题符合用户可能的后续疑问。</think>以下是使用OpenCV实现常见图像处理操作的完整代码示例,包含注释说明和功能整合:
```python
import cv2
import numpy as np
# 读取原始图像
image = cv2.imread('input.jpg')
# ====== 1. 灰度化 ======
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# ====== 2. 高斯模糊 ======
# 参数:(核宽度, 核高度),标准差
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)
# ====== 3. Canny边缘检测 ======
# 参数:低阈值,高阈值(推荐比例1:2或1:3)
edges = cv2.Canny(gray_image, 50, 150)
# ====== 4. 图像旋转 ======
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
# 参数:旋转中心,角度,缩放比例
rotation_matrix = cv2.getRotationMatrix2D(center, 30, 1.0)
rotated_image = cv2.warpAffine(image, rotation_matrix, (w, h),
borderMode=cv2.BORDER_CONSTANT)
# ====== 5. Haar级联人脸检测 ======
# 加载预训练分类器
face_cascade = cv2.CascadeClassifier(
cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
)
# 转换为灰度图进行检测
gray_faces = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(
gray_faces,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30,30)
)
# 在原图上绘制人脸矩形
detected_image = image.copy()
for (x,y,w,h) in faces:
cv2.rectangle(detected_image, (x,y), (x+w,y+h), (0,255,0), 2)
# ====== 显示所有处理结果 ======
cv2.imshow('Original', image)
cv2.imshow('Gray', gray_image)
cv2.imshow('Blurred', blurred_image)
cv2.imshow('Edges', edges)
cv2.imshow('Rotated', rotated_image)
cv2.imshow('Face Detection', detected_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
关键参数说明:
- 高斯模糊核尺寸应为**正奇数**,尺寸越大模糊效果越明显
- Canny阈值推荐使用$低阈值:高阈值 = 1:2$或$1:3$的比例
- 图像旋转使用仿射变换,`borderMode`控制边缘填充方式
- Haar检测参数:
- `scaleFactor=1.1`:每次图像缩放比例
- `minNeighbors=5`:候选框保留阈值
- `minSize=(30,30)`:最小检测目标尺寸
阅读全文
相关推荐








