当前位置:   article > 正文

Python如何叠加两张图片_python 图片叠加

python 图片叠加

我这里有如下两张图片,需要把他们叠加在一起,进行查看。这两张图片的大小都是300 × 300。不拼接在一起就不方便查看。需要把左边的小图,放到右边大图的中间。

一、拼接两个图片的代码

要解决这个问题,你可以使用fromarray()方法将NumPy数组转换回PIL图像对象,然后再进行alpha_composite操作。

  1. from PIL import Image
  2. import numpy as np
  3. # 打开两张图片
  4. img1 = Image.open('image1.png')
  5. img2 = Image.open('image2.png')
  6. # 确保两张图片的大小相同
  7. assert img1.size == img2.size, "两张图片的大小必须相同"
  8. # 将两张图片转换为NumPy数组
  9. img1_array = np.array(img1)
  10. img2_array = np.array(img2)
  11. # 将NumPy数组转换回PIL图像对象
  12. img1_pil = Image.fromarray(img1_array)
  13. img2_pil = Image.fromarray(img2_array)
  14. # 使用alpha_composite方法合并两张图片
  15. result_img = Image.alpha_composite(img1_pil, img2_pil)
  16. # 保存合并后的图片
  17. result_img.save('merged_image.png')

二、旋转图像识别代码

这里我们对接了图像识别接口,可以识别出图像的旋转角度,最后把图片按照正确角度进行旋转,然后拼接在一起查看角度识别是否正确。

代码如下:

  1. import base64
  2. import requests
  3. import datetime
  4. import numpy as np
  5. from io import BytesIO
  6. from PIL import Image
  7. t1 = datetime.datetime.now()
  8. #PIL图片保存为base64编码
  9. def PIL_base64(img, coding='utf-8'):
  10. img_format = img.format
  11. if img_format == None:
  12. img_format = 'JPEG'
  13. format_str = 'JPEG'
  14. if 'png' == img_format.lower():
  15. format_str = 'PNG'
  16. if 'gif' == img_format.lower():
  17. format_str = 'gif'
  18. if img.mode == "P":
  19. img = img.convert('RGB')
  20. if img.mode == "RGBA":
  21. format_str = 'PNG'
  22. img_format = 'PNG'
  23. output_buffer = BytesIO()
  24. # img.save(output_buffer, format=format_str)
  25. img.save(output_buffer, quality=100, format=format_str)
  26. byte_data = output_buffer.getvalue()
  27. base64_str = 'data:image/' + img_format.lower() + ';base64,' + base64.b64encode(byte_data).decode(coding)
  28. return base64_str
  29. # 旋转图片
  30. def rotate_img(img, angle):
  31. # 转换为有alpha层
  32. temp_img2 = img.convert('RGBA')
  33. # 旋转
  34. rot = temp_img2.rotate(-angle)
  35. # 创建一个与旋转图像大小相同的白色图像
  36. fff = Image.new('RGBA', rot.size, (255, 255, 255, 0))
  37. # 使用alpha层的rot作为掩码创建一个复合图像
  38. out = Image.composite(rot, fff, rot)
  39. # 将临时图片转换为元素图片颜色模式
  40. temp_img2 = out.convert(img.mode)
  41. return temp_img2
  42. # 加载外圈大图
  43. img1 = Image.open(r'E:\Python\lixin_project\OpenAPI接口测试\test_img\39号模型测试图片_1.png')
  44. # 图片转base64
  45. img1_base64 = PIL_base64(img1)
  46. # 加载内圈小图
  47. img2 = Image.open(r'E:\Python\lixin_project\OpenAPI接口测试\test_img\39号模型测试图片_2.png')
  48. # 图片转base64
  49. img2_base64 = PIL_base64(img2)
  50. # 验证码识别接口
  51. url = "http://www.detayun.cn/openapi/verify_code_identify/"
  52. data = {
  53. # 用户的key
  54. "key":"Yrebvsf3hz73ZGqles5D",
  55. # 验证码类型
  56. "verify_idf_id":"39",
  57. # 外圈大图
  58. "img1":img1_base64,
  59. # 内圈小图
  60. "img2":img2_base64,
  61. }
  62. header = {"Content-Type": "application/json"}
  63. # 发送请求调用接口
  64. response = requests.post(url=url, json=data, headers=header)
  65. # 获取响应数据,识别结果
  66. print(response.text)
  67. print("耗时:", datetime.datetime.now() - t1)
  68. angle = response.json()['data']['angle']
  69. # 旋转图片
  70. img1 = rotate_img(img1, -angle)
  71. img2 = rotate_img(img2, angle)
  72. # 将两张图片转换为NumPy数组
  73. img1_array = np.array(img1)
  74. img2_array = np.array(img2)
  75. # 将NumPy数组转换回PIL图像对象
  76. img1_pil = Image.fromarray(img1_array)
  77. img2_pil = Image.fromarray(img2_array)
  78. # 使用alpha_composite方法合并两张图片
  79. new_img = Image.alpha_composite(img1_pil, img2_pil)
  80. # 保存合并后的图片
  81. new_img.show()

最终识别拼接效果如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/929295
推荐阅读
相关标签
  

闽ICP备14008679号