OpenCV应用:三种图像风格化案例
OpenCV 本身主要用于计算机视觉任务,例如图像处理、边缘检测、物体识别等,虽然它并不直接提供像 Photoshop 或其他艺术设计软件那样的 "风格化" 功能,但你可以通过一些图像处理技术在 OpenCV 中实现不同风格化效果。
1. 卡通化效果(Cartoonization)
卡通化效果通过边缘检测和色彩简化来模仿卡通风格,通常分为两个步骤:
- 边缘检测:用边缘检测算法(如 Canny 边缘检测)提取图像的轮廓。
- 色彩平滑化:使用高斯模糊或双边滤波来平滑图像,使其更符合卡通风格。
class FrameObject:
def __init__(self):
self.init_parameters()
def init_parameters(self, *args, **kwargs):
pass
def do(self, frame, device):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 进行中值模糊
gray = cv2.medianBlur(gray, 11)
# 边缘检测
edges = cv2.adaptiveThreshold(gray, 255,
cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY, 9, 9)
# 应用双边滤波
color = cv2.bilateralFilter(frame, 9, 300, 300)
# 将边缘与滤波后的图像合成
cartoon = cv2.bitwise_and(color, color, mask=edges)
return cartoon
2. 素描效果(Sketch Effect)
素描风格可以通过将图像转换为灰度并进行边缘检测,然后与原图混合来生成类似素描的效果。
class FrameObject:
def __init__(self):
self.init_parameters()
def init_parameters(self, *args, **kwargs):
pass
def do(self, frame, device):
gray_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 反转灰度图像
inverted_gray = 255 - gray_image
# 高斯模糊反转图像
blurred = cv2.GaussianBlur(inverted_gray, (111, 111), 0)
# 反转模糊图像
inverted_blurred = 255 - blurred
# 创建素描效果
sketch = cv2.divide(gray_image, inverted_blurred, scale=256.0)
return sketch
3.马赛克效果(Mosaic)

class FrameObject:
def __init__(self):
self.init_parameters()
def init_parameters(self, *args, **kwargs):
pass
def do(self, frame, device):
block_size = 10
h, w, _ = frame.shape
for y in range(0, h, block_size):
for x in range(0, w, block_size):
block = frame[y:y+block_size, x:x+block_size]
color = np.mean(block, axis=(0, 1)).astype(int) # 计算块的平均颜色
frame[y:y+block_size, x:x+block_size] = color # 填充颜色
return frame