opencv3.7以下版本将图片变成油画
时间: 2023-06-10 12:07:42 浏览: 161
在 OpenCV 3.7 以下版本,可以通过以下步骤将图片变成油画:
1. 读取图片。使用 `cv2.imread()` 函数读取图片,并将其转换为灰度图像。
```python
img = cv2.imread('image.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
2. 应用双边滤波。使用 `cv2.bilateralFilter()` 函数应用双边滤波,以平滑图像并保留边缘。
```python
smooth_img = cv2.bilateralFilter(gray_img, 11, 75, 75)
```
3. 应用中值模糊。使用 `cv2.medianBlur()` 函数应用中值模糊,以进一步模糊图像。
```python
blur_img = cv2.medianBlur(smooth_img, 7)
```
4. 应用 Laplacian 算子。使用 `cv2.Laplacian()` 函数应用 Laplacian 算子,以检测图像中的边缘。
```python
laplacian = cv2.Laplacian(blur_img, cv2.CV_8U, ksize=5)
```
5. 应用阈值。使用 `cv2.threshold()` 函数将图像二值化,以将边缘区域和非边缘区域分开。
```python
_, threshold = cv2.threshold(laplacian, 30, 255, cv2.THRESH_BINARY_INV)
```
6. 应用彩色化。使用 `cv2.bitwise_and()` 函数将原始彩色图像和二值化图像进行按位与操作,以将边缘区域彩色化。
```python
color_img = cv2.bitwise_and(img, img, mask=threshold)
```
完整代码如下:
```python
import cv2
# 读取图片
img = cv2.imread('image.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 应用双边滤波
smooth_img = cv2.bilateralFilter(gray_img, 11, 75, 75)
# 应用中值模糊
blur_img = cv2.medianBlur(smooth_img, 7)
# 应用 Laplacian 算子
laplacian = cv2.Laplacian(blur_img, cv2.CV_8U, ksize=5)
# 应用阈值
_, threshold = cv2.threshold(laplacian, 30, 255, cv2.THRESH_BINARY_INV)
# 应用彩色化
color_img = cv2.bitwise_and(img, img, mask=threshold)
# 显示结果
cv2.imshow('Oil Painting', color_img)
cv2.waitKey(0)
```
注意:这种方法可能无法在所有图像上产生最佳效果,因为它是基于图像中的边缘来进行油画化的。
阅读全文