pycharm
python
在图片处理过程中,有时需要将图片拉毛,方法应该有多种。一种思路是对像素数值随机增加或减少一个小的随机变量delta,使得像素在小范围内波动,从而达到拉毛的效果。g(x) = f(x) + delta delta 有自己定,根据实际测试不要太大 一般在12以内就有效果。下图为delta = 8 时候的效果。
代码如下:import cv2 as cvimport numpy as npimport randomimage = cv.imread('c:\\mengnalisha.jpg',1)cv.imshow('image', image)引入彩色图片原图
rows, cols, channel = image.shaperesultImg = np.zeros((rows, cols, 3), np.uint8)利用numpy创建一个和原图一样大小的全0矩阵。
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)
#利用delta修改像素数据值 (b,g,r) = image[i - delta, j - delta] resultImg[i, j] = (b, g, r)cv.imshow('resultImg', resultImg)cv.waitKey(0)cv.destroyAllWindows()
把系数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)
小结:通过使用随机数,给每个像素增加一个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()
注意全零矩阵的建立方法
注意随机数的使用