美文网首页
如何使用OpenCV给图片创建卡通效果

如何使用OpenCV给图片创建卡通效果

作者: 2a915547cf58 | 来源:发表于2020-04-28 14:55 被阅读0次

    使用opencv可以使用以下5个步骤创建卡通效果

    1、应用双边滤镜以减少图像的调色板。
    2、将原始彩色图像转换为灰度。
    3、应用中间模糊,以减少灰度图像中的图像噪声。
    4、使用自适应阈值从灰度图像创建边缘蒙版。
    5、将步骤1中的彩色图像与步骤4中的边缘遮罩合并。

    步骤一、由于双边滤镜可以平滑平面区域,同时保持边缘清晰,因此非常适合将RGB图像转换为卡通图像。但是双边滤波器比其他平滑算子(例如,高斯模糊)要慢几个数量级。因此,如果速度很重要,那么对原始图像的缩小版本进行操作可能是一个好主意。即使缩小规模,双边过滤器仍然可能比他的算法慢。因此,另一个技巧是重复(例如,通过num_bilateral = 7七次)应用一个小的双边过滤器,而不是一次应用一个大的双边过滤器。但是实际上这个速度一般都可以接受的

    import cv2num_down = 2
    stepsnum_bilateral = 7
    steps img_rgb = cv2.imread("img_example.jpg")
    img_color = img_rgbfor _ in xrange(num_down):
    img_color = cv2.pyrDown(img_color)
    for _ in xrange(num_bilateral):
        img_color = cv2.bilateralFilter(img_color, d=9,sigmaColor=9,sigmaSpace=7)
    for _ in xrange(num_down):
        img_color = cv2.pyrUp(img_color)

    步骤2-3:使用中值滤波器降低噪声

    自适应阈值的优点在于,它可以检测图像的每个(小)邻域中最显着的特征,而与图像的整体属性无关,这正是我们想要在对象和对象周围绘制粗体,黑色轮廓时所需要的漫画中的人。但是,此属性也使自适应阈值容易受到噪声的影响。因此,最好使用中值滤波器对图像进行预处理,该滤波器将每个像素值替换为较小(例如7像素)邻域中所有像素的中值:

    img_gray= cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY)
    img_blur= cv2.medianBlur(img_gray,7)

    步骤4:使用自适应阈值创建边缘遮罩

    降噪后,可以安全地应用自适应阈值。即使剩下一些图像噪声,使用blockSize = 9的cv2.ADAPTIVE_THRESH_MEAN_C算法也将确保将阈值应用于9x9邻域平均值减去C = 2:

    img_edge = cv2.adaptiveThreshold(img_blur,255,  cv2.ADAPTIVE_THRESH_MEAN_C,
    cv2.THRESH_BINARY, blockSize=9, C=2)

    步骤5:将彩色图像与边缘蒙版组合

    img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB)
    img_cartoon = cv2.bitwise_and(img_color, img_edge)
    cv2.imshow("cartoon", img_cartoon)

    测试地址点滴图片在线转卡通工具

    效果图

    相关文章

      网友评论

          本文标题:如何使用OpenCV给图片创建卡通效果

          本文链接:https://www.haomeiwen.com/subject/wywvwhtx.html