多语言展示
当前在线:1825今日阅读:2今日分享:38

用python增加图片拉毛效果

有时需要给图片添加类似贴近油画看到拉毛效果,现在用python也简单模拟一下这个效果。
工具/原料
1

pycharm

2

python

方法/步骤
1

在图片处理过程中,有时需要将图片拉毛,方法应该有多种。一种思路是对像素数值随机增加或减少一个小的随机变量delta,使得像素在小范围内波动,从而达到拉毛的效果。g(x) = f(x) + delta delta 有自己定,根据实际测试不要太大 一般在12以内就有效果。下图为delta = 8 时候的效果。

2

代码如下:import cv2 as cvimport numpy as npimport randomimage = cv.imread('c:\\mengnalisha.jpg',1)cv.imshow('image', image)引入彩色图片原图

3

rows, cols, channel = image.shaperesultImg = np.zeros((rows, cols, 3), np.uint8)利用numpy创建一个和原图一样大小的全0矩阵。

4

pos = 0   #起始位置  我们从第一个像素开始coeff = 4   # delta系数因子for i in range(pos, rows):    for j in range(pos, cols):        print(random.random())#使用random.random() 生成一个0-1之间的随机数。        delta = int(random.random() * coeff)          print(delta)

5

#利用delta修改像素数据值        (b,g,r) = image[i - delta, j - delta]        resultImg[i, j] = (b, g, r)cv.imshow('resultImg', resultImg)cv.waitKey(0)cv.destroyAllWindows()

6

把系数coeff调整为8,重新计算delta数值,然后输出图片,进行效果对比。coeff = 8#使用random.random() 生成一个0-1之间的随机数。for i in range(pos, rows):    for j in range(pos, cols):        print(random.random())        delta = int(random.random() * coeff)        print(delta)        (b,g,r) = image[i - delta, j - delta]        resultImg[i, j] = (b, g, r)cv.imshow('resultImg', resultImg)

7

小结:通过使用随机数,给每个像素增加一个delta,使得像素发生偏移,从而产生拉毛效果。完整代码如下:import cv2 as cvimport numpy as npimport randomimage = cv.imread('c:\\mengnalisha.jpg',1)cv.imshow('image', image)# Info = img.shape# height = Info[0]# width = Info[1]rows, cols, channel = image.shaperesultImg = np.zeros((rows, cols, 3), np.uint8)print(resultImg)#起始位置  我们从第一个像素开始pos = 0coeff = 8#使用random.random() 生成一个0-1之间的随机数。for i in range(pos, rows):    for j in range(pos, cols):        # print(random.random())        delta = int(random.random() * coeff)        # print(delta)        (b,g,r) = image[i - delta, j - delta]        resultImg[i, j] = (b, g, r)cv.imshow('resultImg', resultImg)cv.waitKey(0)cv.destroyAllWindows()

注意事项
1

注意全零矩阵的建立方法

2

注意随机数的使用

推荐信息