引言


  我们在平时工作、生活中总会用到一些图像不合心意。或是想将图像平移或是想将图像的局部变大或变小。或是想进行翻转等等。这些图像处理我们往往利用一些修图软件进行操作。但目前很多软件都变成收费使用,而且在使用过程中出现越来越多的广告。那么我们是否可以自己制作这样的图像处理工具呢?答案是可以的,而且并不复杂。
  很多的物联网相关工程师,是做硬件的,以前都是制作单片机、嵌入式的开发。我们对于一些软件的编程并不熟悉,但是我们又往往需要用到一些图像处理。这时候我们其实可以用python自己制作一个这样的应用。我们不必制作成软件或是APP。只需要对我们的相关图像进行处理功能就可以了。
  下面我就分享一个图像处理的知识,并且将程序分享出来。有兴趣的可以动手试试,非常简单,但很实用。


正文

翻转


  1. import cv2
  2. from matplotlib import pyplot as plt
  3. image = cv2.imread("1.jpg")
  4. #转换颜色通道
  5. b, g, r = cv2.split(image)
  6. image = cv2.merge([r, g, b])
  7. #图像水平翻转
  8. flipped1 = cv2.flip(image,1)
  9. #图像垂直翻转
  10. flipped2 = cv2.flip(image,0)
  11. #图像水平垂直翻转
  12. flipped3 = cv2.flip(image,-1)
  13. #显示图像
  14. plt.subplot(141),plt.imshow(image),plt.title('Input')
  15. plt.xticks([]),plt.yticks([])
  16. plt.subplot(142),plt.imshow(flipped1),plt.title('Output1')
  17. plt.xticks([]),plt.yticks([])
  18. plt.subplot(143),plt.imshow(flipped2),plt.title('Output2')
  19. plt.xticks([]),plt.yticks([])
  20. plt.subplot(144),plt.imshow(flipped3),plt.title('Output3')
  21. plt.xticks([]),plt.yticks([])
  22. plt.show()

平移


  1. import cv2
  2. import numpy as np
  3. img = cv2.imread('1.jpg')
  4. M = np.float32([[1, 0, 30], [0, 1, 50]])
  5. res = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))
  6. while 1:
  7.         # 显示图像
  8.         cv2.imshow('img', img)
  9.         cv2.imshow('res', res)
  10.         k = cv2.waitKey(5) & 0xFF
  11.         if k == 27:
  12.                 break
  13. # 关闭窗口
  14. cv2.destroyAllWindows()

旋转和缩放


  1. import cv2
  2. image = cv2.imread("1.jpg")
  3. cv2.imshow("Original",image)
  4. cv2.waitKey(0)
  5. (h,w) = image.shape[:2]
  6. center = (w / 2,h / 2)
  7. #旋转45度,缩放0.75
  8. M = cv2.getRotationMatrix2D(center,45,0.75)
  9. rotated = cv2.warpAffine(image,M,(w,h))
  10. cv2.imshow("Rotated by 45 Degrees",rotated)
  11. cv2.waitKey(0)
  12. #旋转-45度。缩放1.25
  13. M = cv2.getRotationMatrix2D(center,-45,1.25)
  14. rotated = cv2.warpAffine(image,M,(w,h))
  15. cv2.imshow("Rotated by -90 Degrees",rotated)
  16. cv2.waitKey(0)

后续

有什么更好的想法,可以评论区进行交流,毕竟技术的进步离不开行业的氛围。