[关闭]
@sevenup233 2019-06-09T10:35:30.000000Z 字数 1056 阅读 406

邻近法与两次线性法

PY


  1. from PIL import Image
  2. img=Image.open("1.png")
  3. #邻近法
  4. def near(img):
  5. width=img.size[0]
  6. height=img.size[1]
  7. newim=Image.new("RGB",(2*width,2*height),(0,0,0))
  8. for j in range(height*2):
  9. ory=int(j/2)
  10. for i in range(width*2):
  11. orx=int(i/2)
  12. orpixel=img.getpixel((orx,ory))
  13. newim.putpixel((i,j),orpixel)
  14. newim.save('near.png')
  15. #双线性
  16. def biline(img):
  17. width=img.size[0]
  18. height=img.size[1]
  19. newim=Image.new("RGB",(2*width,2*height),(0,0,0))
  20. #求中点
  21. ori_mw=(width-1)/2
  22. ori_mh=(height-1)/2
  23. cur_mw=(width*2-1)/2
  24. cur_mh=(height*2-1)/2
  25. #先坐标变换,再找临近四个基准点,第j列(y),第i行(x)
  26. for j in range(height*2):
  27. ref_y=ori_mh-(ori_mh*(cur_mh-j))/cur_mh
  28. for i in range(width*2):
  29. ref_x=ori_mw-(ori_mw*(cur_mw-i))/cur_mw
  30. y1=int(ref_y)
  31. y2=y1+1
  32. x1=int(ref_x)
  33. x2=x1+1
  34. #得到当前点的pixel属性,rgb
  35. pixel=[]
  36. for k in range(3):
  37. if x2>width-1:
  38. x2=width-1
  39. x1-=1
  40. if y2>height-1:
  41. y2=height-1
  42. y1-=1
  43. pixel.append(int(img.getpixel((x1,y1))[k]*(x2-ref_x)*(y2-ref_y)+img.getpixel((x2,y1))[k]*(ref_x-x1)*(y2-ref_y)+img.getpixel((x1,y2))[k]*(x2-ref_x)*(ref_y-y1)+img.getpixel((x2,y2))[k]*(ref_x-x1)*(ref_y-y1)))
  44. pixel.append(255)
  45. newim.putpixel((i,j),tuple(pixel))
  46. newim.save('line.png')
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注