opencv python原图转换为灰度图像,利用边缘检测算法得到图像的边缘,二值化后得到一张掩码图;用双边滤波器多次处理原图得到平滑后的图像,图像看起来更“丝滑”;将得到的掩码图作用到得到的平滑图像上得到卡通化图像。
时间: 2024-09-26 11:17:26 浏览: 41
【python-opencv】 sobel算子 图像边缘检测 图像二值化处理
在Python中,可以使用OpenCV库(cv2)来实现这个过程。以下是步骤的详细解释:
1. **从原图转为灰度图像**:
使用`cv2.cvtColor()`函数,传入原图(通常是BGR格式)和颜色空间转换代码,如`cv2.COLOR_BGR2GRAY`,将其转换为灰度图像。
```python
import cv2
gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
```
2. **边缘检测**:
可以选择多种边缘检测算法,比如Sobel算子、Canny算子等。例如,使用Canny边缘检测:
```python
edges = cv2.Canny(gray_image, low_threshold, high_threshold)
```
其中low_threshold和high_threshold是阈值设置。
3. **二值化**:
对边缘图像进行二值化处理,通常通过设定一个阈值将像素分为黑色和白色:
```python
_, mask = cv2.threshold(edges, threshold_value, 255, cv2.THRESH_BINARY)
```
4. **双边滤波器平滑**:
使用`cv2.bilateralFilter()`进行双边滤波,它既能平滑图像又能保持边缘清晰:
```python
blurred_image = cv2.bilateralFilter(original_image, d, sigmaColor, sigmaSpace)
```
d是邻域半径,sigmaColor和sigmaSpace分别是色彩空间和空间变化的标准差。
5. **应用掩码到平滑图像**:
将掩码用位运算(如bitwise_and)操作应用到平滑图像上,得到最终的卡通化效果:
```python
cartoon_image = cv2.bitwise_and(blurred_image, blurred_image, mask=mask)
```
阅读全文