Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

198 linhas
5.5KB

  1. """
  2. 1.色彩空间:[BGR]
  3. (1) HSV: 更类似于人类感觉颜色的方式。H:色相(Hue) S: 饱和度(Saturation0) V: 亮度(Value)
  4. (2) YUV: Y: 亮度信号 U/V: 两个色彩信号 -> 色彩的饱和度
  5. (3) Lab: 有国际照明委员会建立。 L: 整张图到的明亮度 a\b: 负责颜色的多少
  6. """
  7. import cv2
  8. import numpy as np
  9. from matplotlib import pyplot as plt
  10. # img = cv2.imread(r'C:\Users\chenyukun\Pictures\R.png')
  11. # cv2.imshow("img", img)
  12. # HSV
  13. # hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
  14. # cv2.imshow("hsv", hsv)
  15. # YUV
  16. # yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
  17. # cv2.imshow("yuv", yuv)
  18. # LAB
  19. # lab = cv2.cvtColor(img, cv2.COLOR_BGR2Lab)
  20. # cv2.imshow("lab", lab)
  21. # 分离颜色通道
  22. # print(img)
  23. # b, g, r = cv2.split(img)
  24. # h, w = np.shape(b)
  25. # # 建立空白数组
  26. # hest = np.zeros([256], dtype=np.int32)
  27. # print(hest)
  28. # # 遍历图片
  29. # for i in [b, g, r]:
  30. # for row in range(h):
  31. # for col in range(w):
  32. # pv = i[row, col]
  33. # hest[pv] += 1
  34. # plt.plot(hest, color='r')
  35. # plt.show()
  36. # cv2.waitKey(100000)
  37. # array1 = np.random.randint(0, 255, (300, 150, 3), dtype=np.uint8)
  38. # array2 = np.random.randint(200, 255, (300, 150, 3), dtype=np.uint8)
  39. # new_array = np.hstack([array1, array2])
  40. # cv2.imshow("new_array", new_array)
  41. # cv2.waitKey(100000)
  42. # 彩色图片 -> BGR
  43. # 查看B
  44. # img_B = img.copy()
  45. # img_B[:, :, 1] = 0
  46. # img_B[:, :, 2] = 0
  47. # cv2.imshow("img_B", img_B)
  48. # cv2.waitKey(100000)
  49. # 查看G
  50. # img_G = img.copy()
  51. # img_G[:, :, 0] = 0
  52. # img_G[:, :, 2] = 0
  53. # cv2.imshow("img_G", img_G)
  54. # cv2.waitKey(100000)
  55. # 查看G
  56. # img_R = img.copy()
  57. # img_R[:, :, 0] = 0
  58. # img_R[:, :, 1] = 0
  59. # cv2.imshow("img_R", img_R)
  60. # cv2.waitKey(100000)
  61. # 深入研究图片的读取
  62. """
  63. cv2.imread(path, way)
  64. 0: 读取灰度图片
  65. 1: 读取彩色图片
  66. -1: 读取图片,加载Alpha通道
  67. Alpha通道:
  68. 指一张图片的透明与不透明度
  69. """
  70. img_color = cv2.imread(r'C:\Users\chenyukun\Pictures\R.png')
  71. img_gray = cv2.imread(r'C:\Users\chenyukun\Pictures\R.png', 0)
  72. img_transparent = cv2.imread(r'C:\Users\chenyukun\Pictures\R.png', -1)
  73. """
  74. 彩色图像:三维 B G R -> (373*490)
  75. 灰度图像:二维:-> (373*490)
  76. 推断出的公式: Y = (B+G+R)/3
  77. 官方给出的公式: Y = 0.299R + 0.587G + 0.114B
  78. cv.imshow() -> 不仅仅是array()必须是uint8这种类型的。
  79. """
  80. # 三通道分离
  81. # b, g, r = cv2.split(img_color)
  82. # new_img = (b+g+r)/3
  83. # new_img = 0.299*r + 0.587*g + 0.114*b
  84. # new_img = new_img.astype('uint8')
  85. # cv2.imshow('new_img', new_img)
  86. # 官方的填充方式: 以初始的灰度二维矩阵进行RGB通道的填充
  87. # new_image = cv2.merge([img_gray,img_gray,img_gray])
  88. # cv2.imshow('new_img', new_image)
  89. # cv2.waitKey(100000)
  90. # 图像的加法 -> 矩阵
  91. # 加法 【前提:必须是一样大小的矩阵:对应的元素求和】
  92. """
  93. 像素点: [0,255]超过255怎么办?【取余】
  94. 150+150=300
  95. 300%255
  96. """
  97. """
  98. 图片融合
  99. addWeighted(src1, alpha, src2, beta, gamma)
  100. src1\src2: 第一张和第二张图片
  101. alpha\beta: 第一张图片的权重、第二张图片的权重
  102. gamma: 亮度的调节
  103. """
  104. # result = cv2.addWeighted(img_color, 0.6, img_color, 0.3, 0)
  105. # cv2.imshow('new_img', result)
  106. # cv2.waitKey(100000)
  107. #
  108. # # 图像的类型转换
  109. # # 原始图片BGR -> RGB
  110. # cv2.cvtColor(img_color, cv2.COLOR_BGR2RGB)
  111. """
  112. 1.沿着x轴进行翻转
  113. 2.沿着y轴进行翻转
  114. 3.同时沿着x轴和y进行翻转
  115. cv2.flip(src, flipCode)
  116. src: 源图像
  117. flipCode: 翻转形式
  118. 0:沿着x轴进行翻转
  119. 1(大于等于1): 沿着y轴进行翻转
  120. -1(小于等于-1): 同时沿着x轴和y进行翻转
  121. """
  122. """
  123. 图像阈值化处理
  124. ret, dst = cv2.threshold(src, thresh, maxval, type)
  125. ret: 阈值返回值(阈值设定的是多少)
  126. dst: 输出的图像
  127. src: 源图像 需要阈值化处理的图像
  128. thresh: 人为指定的阈值
  129. maxval: 当像素超过了阈值,(小于等于阈值)所赋予的值,否则取0
  130. type:
  131. (1) cv2.THRESH_BINARY: 当像素点大于阈值时,取指定255,小于等于阈值时,取0
  132. (2) cv2.THRESH_BINARY_INV: 当像素点大于阈值时,取0。小于等于阈值时,取255
  133. (3) cv2.THRESH_TRUNC: 超过阈值取阈值,低于阈值取自身
  134. (4) cv2.THRESH_TOZERO: 超过阈值不变,低于阈值取0
  135. (5) cv2.THRESH_TOZERO_INV: 超过阈值变为0, 低于阈值不变
  136. 注意:当阈值处理彩色图像时,出现粉色等颜色的原因在于: BGR三通道的叠加
  137. """
  138. # ret, dst = cv2.threshold(img_color, 127, 255, cv2.THRESH_BINARY)
  139. # cv2.imshow('new_img', dst)
  140. # cv2.waitKey(100000)
  141. """
  142. 均值滤波
  143. cv2.blur(src, kernel)
  144. src: 源图像
  145. kernel: 大小(选择多大的矩阵进行平移[3*3最常见])
  146. """
  147. # new_img = cv2.blur(img_color, (3, 3))
  148. # cv2.imshow('new_img', new_img)
  149. # cv2.waitKey(100000)
  150. """
  151. 方框滤波
  152. cv2.boxFilter(src,depth, ksize, normalize)
  153. src: 源图像
  154. depth: 图像的深度 填-1就ok, 表示与源图像深度相同
  155. ksize: 核大小(3*3)(5*5)
  156. normalize: 是否进行归一化
  157. 0:false 不进行归一下(求和,像素点溢出,超过255取255)
  158. 1:True 进行归一化,也就是均值滤波
  159. """
  160. """
  161. 高斯滤波【考虑了权重问题】
  162. cv2.GaussianBlur(src, ksize, sigmaX, sigmaY)
  163. src:源图像
  164. ksize: (3*3)(5*5) 必须为奇数
  165. sigmaX, sigmaY: 高斯核函数在x或y方向上的标准偏差【控制权重】
  166. sigmaX = 0, sigmaX = 0.3 * ((ksize -1) * 0.5 -1) + 0.8
  167. """
  168. '''
  169. 中值滤波
  170. cv2.medianBlur(src, ksize)
  171. src: 源图像
  172. ksize:核大小, 只能传递int(1,3,5,7,9)【(3, 3)(5, 5)】
  173. '''
  174. new_img = cv2.medianBlur(img_color, 5)
  175. cv2.imshow('new_img', new_img)
  176. cv2.waitKey(100000)