给图像/视频添加马赛克效果开发说明书

1. 给图像添加马赛克程序.

马赛克效果: 矩形中的像素具有相同的像素值, 产生类似于马赛克的图像效果.

V1.

    for n in range(0, width, step):
        if m % step == 0 and n % step == 0:
            # (b, g, r) = img[m, n]  # left top pixel
            # mean value
            tem_sum = np.sum(img[m:m + step, n:n + step], 0)
            # [[b, g, r],
            #  [b, g, r]
            #    .....   
            #  [b, g, r]] # step rows! 
            (b, g, r) = np.sum(tem_sum, 0) / (step * step) # R, G, B channels!
            img[m:m + step, n:n + step] = (b, g, r)

V2. Flatten the matrix to a 1D array. Then op the mosaic!!! Wrong!!!

应该是按照通道进行操作的, 如对于B通道来说, 取B通过矩阵(2D矩阵)的一小块, 计算该小块均值, 然后将该小块的值均赋值成均值即可.
time_start_V2 = time.time()
img_array = img.flatten()
for k in range(0, len(img_array), step * step):
    # print(np.sum(img_array[k:k + step * step]) / (step * step))
    img_array[k:k + step * step] = np.sum(img_array[k:k + step * step]) / (step * step)

img_array= img_array.reshape((height, width, 3))

cv2.imwrite("output_V2.jpg", img_array)

time_end = time.time()
print("time cost V2", time_end - time_start_V2, "s") # scared.JPG, V2 ......

2. 轻度: 5; 中度: 10; 重度: 15.

另外, step的选择和图像的分辨率有很大关系!! 图像分辨率越大, 那么step越大才能显示出马赛克效果; 图像分辨率越小, 较小的step也可导致较重的马赛克效果.

3. 采用快速将matrix进行分块, 然后再对块进行处理, 这个操作也行不通. 因为一个2D矩阵, 生成的块矩阵是4D矩阵, 再取每一个块时, 也比较耗时.

4. 采用多线程操作.

可以解决耗时的问题. 对于一张图像而言, 直接对双层for循环进行多线程操作即可; 对于视频来说, 对于每一帧图像, 在进行完线程处理后, 先sleep(0.1s), 等待上一个线程操作完. 可以解决线程不同步问题, 因为我们要将处理后的每帧图像写入视频, 所以要进行等待!!! 简单版本处理!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值