图片阴影去除(拍照图片转PDF)实现万能扫描王阴影去除的效果

1 篇文章 0 订阅
1 篇文章 0 订阅

前言

如何将拍摄的图片有效的转换为pdf,最大的问题就是我们在拍摄照片的时候不可避免的出现光照遮挡而产生阴影的问题,如何有效的去除阴影,网上大部分解决方案就是使用灰度图进行二值化(如果只保留黑白色的图像就能满足需求,推荐使用opencv的直方图自适应阈值),但是如果是想对彩色图片去除阴影,这是一个不太好处理的过程,在尝试了很多网友给出的方案后,找到一个能够满足需求的方案 参考文章链接

存在的问题

依赖于上文的参考文章所给出的代码经过分析可以知道,实现的基本思路的先进行最大值滤波,再进行最小值滤波,然后将最大值滤波的图片减去最小值滤波(实现背景减法),最后对图像进行归一化操作。原文给出的代码也是对灰度图进行处理,我通过部分修改实现了对彩色图片的处理,且原文是作者手写的最大最小滤波,执行速度会非常慢,下面上优化后的代码(主要优化为支持彩色图片阴影去除、执行速度大幅提升)

import cv2
import numpy as np
from scipy.ndimage import maximum_filter
from scipy.ndimage import minimum_filter

def max_filtering(N, image):
    """
    进行最大值滤波
    :param N: 卷积核大小
    :param image: 需要滤波的图片
    :return: 滤波后的图片
    """
    return maximum_filter(image, size=(N + 1, N + 1, 1), mode='constant', cval=-1)

def min_filtering(N, image):
    """
    最小滤波值滤波
    :param N: 卷积核大小
    :param image: 需要最小滤波的图片
    :return: 滤波后的图片
    """
    height, width, channels = image.shape
    wall_min = np.full((height + (N // 2) * 2, width + (N // 2) * 2, channels), 300)
    wall_min[(N // 2):wall_min.shape[0] - (N // 2), (N // 2):wall_min.shape[1] - (N // 2)] = image.copy()
    min_filtered = minimum_filter(wall_min, size=(N + 1, N + 1, 1), mode='constant', cval=300)
    # 裁剪回原始大小
    result = min_filtered[N // 2: -N // 2, N // 2: -N // 2, :]
    return result

def background_subtraction(i, b):
    """
    执行图像背景减法,并进行归一化处理
    :return: 背景减法并归一化的图像
    """
    o = i - b
    norm_img = cv2.normalize(o, None, 0, 255, norm_type=cv2.NORM_MINMAX)
    return norm_img

def min_max_filtering(M, N, I):
    global normalised_img
    if M == 0:
        # 最大滤波
        max_filter = max_filtering(N, I)
        # 最小滤波
        min_filter = min_filtering(N, max_filter)
        # 背景减法
        normalised_img = background_subtraction(I, min_filter)
    elif M == 1:
        # 先最小滤波
        min_filter = min_filtering(N, I)
        # 再最大滤波
        max_filter = max_filtering(N, min_filter)
        # 背景减法
        normalised_img = background_subtraction(I, max_filter)
    return normalised_img

P = cv2.imread('test.jpg')
O_P = min_max_filtering(M=0, N=20, I=P)
O_P_display = cv2.convertScaleAbs(O_P)
# 显示图片
cv2.imshow('Result', O_P_display)
cv2.waitKey(0)
cv2.destroyAllWindows()

示例图片

下面演示图光照阴影比较刻意,真实的光照情况下效果比下面演示要好很多

原图1
在这里插入图片描述处理后的图片1
在这里插入图片描述
原图2
在这里插入图片描述处理后的图片2
在这里插入图片描述

参考文章

https://aistudio.baidu.com/projectdetail/5398378

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这不是一个问题,而是一个要求,我会尽力回答你的需求。对于HTML5图片自动翻特效,可以使用CSS3的transform属性来实现。具体实现方法可以参考以下代码: ```html <div class="flip-container"> <div class="flipper"> <div class="front"> <img src="image.jpg" alt="Image"> </div> <div class="back"> <img src="image.jpg" alt="Image"> </div> </div> </div> ``` ```css .flip-container { perspective: 1000px; position: relative; } .flipper { position: absolute; width: 100%; height: 100%; transition: transform 0.6s; transform-style: preserve-3d; } .flipper:hover { transform: rotateY(180deg); } .front, .back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; } .back { transform: rotateY(180deg); } ``` 对于CSS3带动态阴影效果的3D图片特效,可以使用以下代码实现: ```html <div class="flip-container"> <div class="flipper"> <div class="front"> <img src="image.jpg" alt="Image"> </div> <div class="back"> <img src="image.jpg" alt="Image"> </div> </div> </div> ``` ```css .flip-container { perspective: 1000px; position: relative; } .flipper { position: absolute; width: 100%; height: 100%; transition: transform 0.6s; transform-style: preserve-3d; box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); } .flipper:hover { transform: rotateY(180deg); } .front, .back { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; } .back { transform: rotateY(180deg); } ``` 希望这些代码可以帮助到你,如果有任何问题,可以继续问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值