1. 读入图片并显示

  1. import cv2
  2. img = cv2.imread("longmao.jpg")
  3. cv2.imshow("longmao", img)
  4. cv2.waitKey(0) #等待按键,0表示永久等待
  5. cv2.destroyAllWindows() #完成之后销毁窗体

2. RGB通道分离

基于numpy数组的方法

  1. r = img[:, :, 2]
  2. g = img[:, :, 1]
  3. b = img[:, :, 0]

注意:OpenCV读取的顺序是BGR。

**基于OpenCV的RGB通道分离

  1. b, g, r = cv2.split(img) #得到三个通道的值
  2. b = cv2.split(img)[0]

3. RGB通道分离

  1. img2 = cv2.merge([b, g, r])

4. 单像素处理

  1. img[9, 9, 2] #通过数组索引的方式获取某个像素值,
  2. #获取第10行,第10列(从0开始)的单独R颜色分量

5. 遍历图像

  1. img = cv2.imread("longmao.jpg")
  2. img2 = np.zeros(img.shape)
  3. for i in range(img.shape[0]):
  4. for j in range(img.shape[1]):
  5. img2[i, j, 0] = img[i, j, 0] #b分量
  6. #img2[i, j, 1] = img[i, j, 1] #g分量
  7. #img2[i, j, 2] = img[i, j, 3] #R分量
  8. #img2[i, j] = cv2.merge([img2[i, j, 0], img2[i, j, 1], img2[i, j, 2]])
  9. cv2.imshow("copy", img2)
  10. cv2.waitKey(0)
  11. cv2.destroyAllWindows() #完成之后销毁窗体

图片的蓝色分量显示

5. 给图片添加椒盐噪声

  1. import numpy as np
  2. import cv2
  3. def addPepperAndSalt(img, n):
  4. img2 = img
  5. for i in range(n):
  6. x = int(np.random.random() * img.shape[0])
  7. y = int(np.random.random() * img.shape[1])
  8. img2[x, y, 0] = 255
  9. img2[x, y, 1] = 255
  10. img2[x, y, 2] = 255
  11. return img2
  12. img = cv2.imread("longmao.jpg")
  13. img2 = addPepperAndSalt(img, 5000)
  14. cv2.imshow("salt and pepper", img2)
  15. cv2.waitKey(0)
  16. cv2.destroyAllWindows()

注:np.random.random():返回[0.0, 1)的随机数,默认是一个,括号里面可以选返回随机数的数量

6. 添加椒盐噪声进阶版

  1. import cv2
  2. import numpy as np
  3. def peppersalt(img, n, m):
  4. """
  5. Add peppersalt to image
  6. :param img: the image you want to add noise
  7. :param n: the total number of noise (0 <= n <= width*height)
  8. :param m: different mode
  9. m=1:add only white noise in whole image
  10. m=2:add only black noise in whole image
  11. m=3:add black and white noise in whole image
  12. m=4:add gray scale noise range from 0 to 255
  13. m=5:add color noise in whole image,RGB is combined randomly with every channel ranges from 0 to 255
  14. :return: the processed image
  15. """
  16. img2 = img
  17. if m == 1:
  18. for i in range(n):
  19. x = int(np.random.random() * img.shape[0])
  20. y = int(np.random.random() * img.shape[1])
  21. img2[x, y, 0] = 255 #添加白色噪声
  22. img2[x, y, 1] = 255
  23. img2[x, y, 2] = 255
  24. elif m == 2:
  25. for i in range(n):
  26. x = int(np.random.random() * img.shape[0])
  27. y = int(np.random.random() * img.shape[1])
  28. img2[x, y, 0] = 0 #黑色
  29. img2[x, y, 1] = 0
  30. img2[x, y, 2] = 0
  31. elif m == 3:
  32. for i in range(n):
  33. x = int(np.random.random() * img.shape[0])
  34. y = int(np.random.random() * img.shape[1])
  35. flag = np.random.random() * 255 #随机添加白色或黑色
  36. if flag > 128:
  37. img2[x, y, 0] = 255
  38. img2[x, y, 1] = 255
  39. img2[x, y, 2] = 255
  40. else:
  41. img2[x, y, 0] = 0
  42. img2[x, y, 1] = 0
  43. img2[x, y, 2] = 0
  44. elif m == 4:
  45. for i in range(n):
  46. x = int(np.random.random() * img.shape[0])
  47. y = int(np.random.random() * img.shape[1])
  48. flag = int(np.random.random() * 255) #随机颜色
  49. img2[x, y, 0] = flag
  50. img2[x, y, 1] = flag
  51. img2[x, y, 2] = flag
  52. elif m == 5:
  53. for i in range(n):
  54. x = int(np.random.random() * img.shape[0])
  55. y = int(np.random.random() * img.shape[1])
  56. f1 = int(np.random.random() * 255) #彩色
  57. f2 = int(np.random.random() * 255)
  58. f3 = int(np.random.random() * 255)
  59. img2[x, y, 0] = f1
  60. img2[x, y, 1] = f2
  61. img2[x, y, 2] = f3
  62. return img2
  63. if __name__ == "__main__":
  64. img = cv2.imread("longmao.jpg")
  65. img = peppersalt(img, 500, 5)
  66. cv2.imshow("salt and pepper", img)
  67. cv2.waitKey(0)
  68. cv2.destroyAllWindows()

7. 实现下雪demo

  1. def snow2pic(img, n):
  2. """
  3. :param img: input a rgb picture
  4. :param n: density of the snow
  5. :return: the pic with snow in the top
  6. """
  7. #length, width = img.shape
  8. #top_length = length * 0.35
  9. for i in range(n):
  10. x = int(np.random.random() * img.shape[0] * 0.35)
  11. y = int(np.random.random() * img.shape[1])
  12. img[x, y, 0] = 255 # 添加白色噪声
  13. img[x, y, 1] = 255
  14. img[x, y, 2] = 255
  15. for i in range(200):
  16. x = int(np.random.random() * img.shape[0] * 0.8)
  17. y = int(np.random.random() * img.shape[1])
  18. img[x, y, 0] = 255 # 添加白色噪声
  19. img[x, y, 1] = 255
  20. img[x, y, 2] = 255
  21. return img
  22. if __name__ == "__main__":
  23. img = cv2.imread("longmao.jpg")
  24. img = snow2pic(img, 400)
  25. cv2.imshow("salt and pepper", img)
  26. cv2.waitKey(0)
  27. cv2.destroyAllWindows()

基于python的OpenCV图像1的更多相关文章

  1. BugKu 2B+基于python的opencv的安装-------CTF 盲水印的套路

    BugKu杂项-2B 下载图片后,binwalk下跑一跑,发现有个zip,分离. 值得一提的是,这个zip是伪加密的. 但是你在分离的时候,伪加密的图片也给你分离出来了.这两个图片2B和B2肉眼看起来 ...

  2. Python下opencv使用笔记(图像频域滤波与傅里叶变换)

    Python下opencv使用笔记(图像频域滤波与傅里叶变换) 转载一只程序喵 最后发布于2018-04-06 19:07:26 阅读数 1654  收藏 展开 本文转载自  https://blog ...

  3. Python 图像处理 OpenCV (14):图像金字塔

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  4. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  5. Python下opencv使用笔记(一)(图像简单读取、显示与储存)

    写在之前 从去年開始关注python这个软件,途中间间断断看与学过一些关于python的东西.感觉python确实是一个简单优美.easy上手的脚本编程语言,众多的第三方库使得python异常的强大. ...

  6. Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 图像属性 图像 ...

  7. Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  8. Python 图像处理 OpenCV (5):图像的几何变换

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  9. Python 图像处理 OpenCV (6):图像的阈值处理

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

随机推荐

  1. WebService CXF知识总结

    2018-10-23 <wsdl:service name="Iptv3aBasicService"> 客户端client信息,CXF会生成一个名为Iptv3ABasi ...

  2. ESP8266擦除工具完整安装

    ESP8266擦除工具完整安装 一.  ESP8266擦除工具路径:http://down.liangchan.net/ESP8266%B2%C1%B3%FD%B9%A4%BE%DF%CD%EA%D5 ...

  3. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验二 面向对象程序设计 实验报告

    20175316 盛茂淞 2018-2019-2 <Java程序设计>实验二 面向对象程序设计 实验报告 (一)单元测试 在 IDEA中我们把产品代码放在src目录中,把测试代码放在tes ...

  4. Oracle 中DATE类型的计算

    select sysdate,add_months(sysdate,12) from dual;        --加1年 select sysdate,add_months(sysdate,1) f ...

  5. GitHub上最受欢迎的 5 大 Java 项目

    1. Mockito Mockito 并不是无酒精混合饮料的意思.Mockito 是一个针对 Java 的 mocking 框架.它与 EasyMock 和jMock 很相似,但是通过在执行后校验什么 ...

  6. Unity3D编辑器扩展(三)——使用GUI绘制窗口

    前两篇分别讲解了创建菜单https://www.cnblogs.com/xiaoyulong/p/10115053.html和创建窗口https://www.cnblogs.com/xiaoyulon ...

  7. Python字符串格式化--format()方法

    https://blog.csdn.net/i_chaoren/article/details/77922939       csdn

  8. 文本超过控件长度自动显示省略号的css

    overflow: hidden; white-space: nowrap; text-overflow: ellipsis;

  9. JAVA核心技术第二卷 第一章

    流的家族:

  10. spring 读取yaml配置文件

    从Spring框架4.1.0增加了对YAML的支持,Spring框架4.1.0 maven POM具有Snakeyaml依赖性  . 您可以在Spring Boot应用中使用两种方式加载YAML: 1 ...