美文网首页
12油画特效

12油画特效

作者: 犬夜叉写作业 | 来源:发表于2019-07-17 15:51 被阅读0次

    第一步:彩色图片转化到灰度图片
    第二步:将图片分割为若干个小方块,可以使77或1010等等
    第三步:将0-255的灰度值划分为几个等级,并把第二步处理的结果映射到这个范围内,比如将0-255划分为4个灰度段,那么就是0-63 64-127 128-191 192-255。如果有一像素,灰度值为10,那么就属于0-63这个灰度段
    第四步:找到每个方块中灰度等级最多的所有像素,并求解这些像素的均值,完成灰度段中像素的统计
    第五步:用统计出来的均值来替代原理的像素值,实现油画
    此过程运算量比较大

    #1 gray 2 7*7 10*10 3 0-255 256 4 640-63 64-127 
    # 3 10 0-63 99 
    # 4 count 5 dst = result
    
    import cv2
    import numpy as np
    img = cv2.imread('image00.jpg',1)
    cv2.imshow('src',img)
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    dst = np.zeros((height,width,3),np.uint8)
    
    for i in range(4,height-4):
        for j in range(4,width-4):
            array1 = np.zeros(8,np.uint8)     #定义8个灰度等级(8个灰度段)
            for m in range(-4,4):             #因为此处方块长宽都是是从-4到4,所以前面两个for循环要的范围是range(4,height-4)跟range(4,width-4)
                for n in range(-4,4):
                    p1 = int(gray[i+m,j+n]/32)   #灰度等级的统计,划分为8个等级,每个灰度段有32个值,求均值,计算其投影到哪个灰度段中
                    array1[p1] = array1[p1]+1   #将上面的结果放入array1
            currentMax = array1[0]          #获取array1中到底哪一个段内其像素值最多
            l = 0    #记录那一个段
    
            #求取当前最大像素值
            for k in range(0,8):      #遍历当前array1
                if currentMax<array1[k]:    #求取当前最大像素值
                    currentMax = array1[k]
                    l = k
    
            # 以下为简化算法,此处也可以用求均值的方法
            for m in range(-4,4):
                for n in range(-4,4):
                    if gray[i+m,j+n]>=(l*32) and gray[i+m,j+n]<=((l+1)*32):
                        (b,g,r) = img[i+m,j+n]
            dst[i,j] = (b,g,r)
    cv2.imshow('dst',dst)
    cv2.waitKey(0)
    

    相关文章

      网友评论

          本文标题:12油画特效

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