Python+OpenCV图像处理!PS对于图像处理来说简直小儿科!

简介: OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库。

应用领域:

OpenCV可用于解决如下领域的问题:

  • 增强现实

  • 人脸识别

  • 手势识别

  • 人机交互

  • 动作识别

  • 运动跟踪

  • 物体识别

  • 图像分割

  • 机器人


作为一个游离在编程大门之外的小白,我开始了艰难的自学之路,在被泛函分析、数值分析折磨之余,敲敲代码学习一下Python,咸鱼就是这么犹豫,永远不知道自己究竟想干什么,管他呢,想得多,烦恼多。开始整理


图像读取

代码如下:


  1. '''

  2. 目的:读取一幅图像

  3. 实现方式:opencv

  4. '''

  5.  

  6. import cv2 # 引入模块

  7.  

  8. img = cv2.imread("E://image//12.jpg") # 读取图像

  9.  

  10.  

  11. # 定义一个函数显示图像

  12.  

  13. def cv_show(name, img):

  14. cv2.imshow(name, img)

  15. cv2.waitKey(0)

  16. cv2.destroyAllWindows()

  17.  

  18.  

  19. cv_show('image', img)

转换颜色空间

代码:

 
  1. '''

  2. 目的:转换图片的颜色空间

  3. 实现方式:opencv

  4. '''

  5.  

  6. import cv2 # 引入模块

  7.  

  8. img = cv2.imread('E:\\image\\street.jpg')

  9.  

  10.  

  11. # 定义显示函数

  12. def cv_show(name, img):

  13. cv2.imshow(name, img)

  14. cv2.namedWindow(name, 0)

  15. cv2.resizeWindow(name, 1000, 600)

  16. cv2.waitKey(0)

  17. cv2.destroyAllWindows()

  18.  

  19.  

  20. # 转换颜色空间

  21. img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

  22. cv_show('picture', img_gray)

  23. img_ycbcr = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

  24. cv_show('YCBCR', img_ycbcr)

  25. img_ntsc = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)

  26. cv_show('NTSC', img_ntsc)

获取图片矩阵数据

代码:

 
  1. '''

  2. 目的:打印图片矩阵数据

  3. 实现方式:opencv

  4. '''

  5.  

  6. ## 引入模块

  7. import cv2

  8. import numpy as np

  9.  

  10. ## 读取图片

  11. img = cv2.imread('E:\image\tower Japan.jpg')

  12.  

  13. ## 相应变量

  14. img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

  15. img_ntsc = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)

  16. img_ycbcr = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

  17.  

  18. ## 定义打印数值函数

  19. def mdata(name, img):

  20. data = np.array(img)

  21. print(data)

  22.  

  23. ## 调用函数

  24. mdata('img', img)

  25.  

  26. ## writfile('img',img)

  27. mdata('img_gray', img_gray)

  28. mdata('img_ntsc', img_ntsc)

  29. mdata('img_ycbcr', img_ycbcr)

  30.  

  31. ## 打印图片的行数和列数

  32. h, w, _ = img.shape

  33. print('行数%d,列数%d' % (h, w))

截取部分显示

代码:

 
  1. '''

  2. 目的:实现图片的部分显示

  3. 实现方式:opencv

  4. '''

  5.  

  6. ## 引入模块

  7. import cv2

  8. img = cv2.imread('E:\image\12.jpg')

  9.  

  10. ## 定义一个分割函数实现部分图片的显示

  11. def cut_image(p):

  12. image = p[100:500, 200:600]

  13. cv2.imshow('picture', image)

  14. cv2.waitKey(0)

  15. cut_image(img)

直方图均衡化

代码:

 
  1. '''

  2. 目标:实现灰度图片的直方图均衡化

  3. 实现方式:opencv与numpy

  4. '''

  5. import cv2# 引入模块

  6. import numpy as np

  7. from matplotlib import pyplot as plt

  8. img = cv2.imread("E:\image\12.jpg", 0)

  9. plt.hist(img.ravel(), 256, [0, 256])

  10. plt.axis('off')

  11. plt.show()# 获取图像的直方图

  12. #直方图均衡化(全局)

  13. equ = cv2.equalizeHist(img)

  14. res = np.hstack((img, equ)) # 并排叠加图片

  15. cv2.imshow('', equ)

  16. cv2.waitKey(0)

  17.  

  18. ## 直方图均衡化(部分) ps:这种办法局部细节丢失较少

  19. '''clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))

  20. cl1 = clahe.apply(img)

  21. cv2.imshow('p',cl1)

  22. cv2.imshow('k',img)

  23. cv2.waitKey(0)

  24. plt.figure()

  25. plt.hist(cl1.ravel(), 256, [0, 256])

  26. plt.axis('off')

  27. plt.show()'''

总结:

其实这些很简单,但是自己也学了好久,加油吧。

以上代码都是在conda环境里跑的,毕竟我是一个懒人,什么都懒得配置。 以前一直觉得学习编程应该不算很难,但真的当自己开始学习时才会感到,原来它们这么麻烦,有的算法原理很简单,但在计算机上让人实现就会感到很头疼。

你可能感兴趣的:(Python)