一、图片预处理

OpenCV系列—本文底页有多个常用方法链接

1.1 边界填充(padding)

方法 : cv2.copyMakeBorder

  • BORDER_REPLICATE:复制法,也就是复制最边缘像素。
  • BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
  • BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
  • BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
  • BORDER_CONSTANT:常量法,常数值填充。
import cv2
import matplotlib.pyplot as pltimg = cv2.imread('cat.png')
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_CONSTANT, value=0)plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')plt.show()

其效果如下:

cat.png原图下载:

dog.png原图下载:

1.2 融合图片(mixup)

方法 : cv2.addWeighted(src1, alpha, src2, beta, gamma)

  • src1, src2:需要融合相加的两副大小和通道数相等的图像
  • alpha:src1的权重
  • beta:src2的权重
  • gamma:gamma修正系数,不需要修正设置为0
import cv2
import matplotlib.pyplot as pltimg_cat = cv2.imread('cat.png')
img_cat = cv2.cvtColor(img_cat, cv2.COLOR_RGB2BGR)
cat_shape = [img_cat.shape[1], img_cat.shape[0]]  # 因为cv2读取通道数是最后一位img_dog = cv2.imread('dog.png')
img_dog = cv2.cvtColor(img_dog, cv2.COLOR_RGB2BGR)
img_dog = cv2.resize(img_dog, cat_shape)mixup = cv2.addWeighted(img_cat, 0.55, img_dog, 0.45, 0)plt.imshow(mixup)
plt.show()

其效果如下:

1.3 图像阈值

ret, dst = cv2.threshold(src, thresh, maxval, type)

  • src: 输入图,只能输入单通道图像,通常来说为灰度图
  • dst: 输出图
  • thresh: 阈值
  • maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
  • type:二值化操作的类型,包含以下5种类型:
  • cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0
  • cv2.THRESH_BINARY_INV THRESH_BINARY的反转
  • cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
  • cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
  • cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
import cv2  # opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt  # Matplotlib是RGB# %matplotlib inline  # jupyter环境解除img = cv2.imread('cat.png')
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)"""
灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gray.shapecv2.imshow("img_gray", img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
"""ret, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]for i in range(6):plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')plt.title(titles[i])plt.xticks([]), plt.yticks([])
plt.show()

其效果如下:

二、滤波器

2.1 均值滤波器

import cv2
import numpy as npimg = cv2.imread('lenaNoise.png')cv2.imshow('blur', img)
cv2.waitKey(0)
cv2.destroyAllWindows()# 均值滤波
# 简单的平均卷积操作
blur = cv2.blur(img, (3, 3))

lenaNoise.png原图展示:

白色为图片,黄色区域为滤波器窗口:

2.2 方框滤波器

# 方框滤波
# 基本和均值一样,可以选择归一化
box = cv2.boxFilter(img, -1, (3, 3), normalize=True)

总结: 均值滤波器是取滤波器中的平均值,然后继续滑动下一个窗口。

2.3 高斯滤波器

# 高斯滤波
# 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
aussian = cv2.GaussianBlur(img, (5, 5), 1)

总结: 高斯滤波器是滤波器窗口中离中心值近的权值大,用高斯分布增加一个权重,然后继续滑动下一个窗口。

2.4 中值滤波

# 中值滤波
# 相当于用中值代替
median = cv2.medianBlur(img, 5)  # 中值滤波

总结: 中值滤波器是滤波器窗口中所有数字的中间值,如黄色框中9个数的中间值为113,然后继续滑动下一个窗口。

2.5 所有滤波器按照上述顺序输出

# 展示所有的
res = np.hstack((blur, aussian, median))
# print (res)
cv2.imshow('median vs average', res)
cv2.waitKey(0)
cv2.destroyAllWindows()


总结:中值滤波器的图效果最好,可以解决一些椒盐噪声。

三、其他OpenCV系列方法链接

  • OpenCV之图片预处理方法
  • OpenCV之形态学操作(开运算与闭运算)
  • OpenCV之图像梯度
  • OpenCV之图像轮廓
  • OpenCV之直方图均衡化

OpenCV之图片预处理方法相关推荐

  1. ctf 改变图片高度_每天一分钟,python一点通(opencv的图片处理方法)

    有网友私信小编说,小编的文章很好,讲解的也很详细,但是有些知识点很深奥,对初学者不是很友好,回想小编的文章虽然几乎每条代码都有介绍,但是很多函数没有太详细,小编后期会重启 <每天一分钟,pyth ...

  2. opencv缩小图片的方法

    scaling_factor = 0.4 img_scaled = cv2.resize(img, None, fx=scaling_factor, fy=scaling_factor,interpo ...

  3. python切割图片文字_Python+opencv 实现图片文字的分割的方法示例

    Python+opencv 实现图片文字的分割的方法示例 发布时间:2020-08-26 03:28:37 来源:脚本之家 阅读:116 作者:坏小孩90 实现步骤: 1.通过水平投影对图形进行水平分 ...

  4. cv2 inrange灰度图_Python opencv将图片转为灰度图的方法示例

    这篇文章主要介绍了python opencv将图片转为灰度图的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 使用ope ...

  5. 通过opencv标记图片以及写入Excel小方法

    通过opencv标记图片以及写入Excel小方法 通过opencv根据坐标绘制图片框,然后保存图片 将结果读入并且写入Excel中进行保存 Python strip() 方法用于移除字符串头尾指定的字 ...

  6. python头像转卡通_Python实现将照片变成卡通图片的方法【基于opencv】

    本文实例讲述了Python实现将照片变成卡通图片的方法.分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的 ...

  7. python3 opencv 基于二值化图像素投影的图片切割方法

    对于一些背景纯色,结构相对简单的图,可以利用传统的opencv图像处理进行分割.先来记录一下基于二值化图像素投影的图片切割方法的实现.比如下面这张图,可以利用这个算法进行切割.(源代码在最后面) 切割 ...

  8. python照片转卡通_Python实现将照片变成卡通图片的方法【基于opencv】

    本文实例讲述了Python实现将照片变成卡通图片的方法.分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的 ...

  9. python人像变卡通,Python实现将照片变成卡通图片的方法【基于opencv】

    本文实例讲述了Python实现将照片变成卡通图片的方法.分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的 ...

最新文章

  1. flume源码学习8-hdfs sink的具体写入流程
  2. pip freeze requirements.txt 分隔 sudo pip install -r requirements.txt
  3. cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用
  4. 【资源】MIT 更新最大自然灾害图像数据集,囊括 19 种灾害事件
  5. 人工智能在语音和数字图像处理领域有哪些具体化应用_智能呼叫中心系统有哪些优势...
  6. vector cbegin_vector :: cbegin()函数以及C ++ STL中的示例
  7. iOS 第五期考核题(字典与数组嵌套,字典的排序/删除)
  8. 计算机软件理论基础集合论,从数理逻辑观点看计算机专业的理论基础探讨
  9. 连接DB2 抛异常SQL Error SQLCODE=-204, SQLSTATE=42704
  10. 使用 IntraWeb (29) - 基本控件之 TIWAutherList、TIWAutherINI、TIWAutherEvent
  11. 「代码随想录」746. 使用最小花费爬楼梯【动态规划】力扣详解!
  12. CADisplaylink初解
  13. 引用了System.Configuration命名空间,却找不到ConfigurationManager类
  14. 算法导论8-5习题解答(平均排序)
  15. 中文文本拼写检查错误纠正方案整理
  16. 统计学原理 数值型数据的整理与展示
  17. 树莓派linux下载机,树莓派打造北邮人种子下载机——下载、做种一条龙全站式教程...
  18. 游戏开发之Unity2021智能导航地图烘焙
  19. 如何树立正确的工作态度
  20. 【黑客故事】钢铁侠Musk的音影记录

热门文章

  1. C++ 关于回车和换行
  2. C#利用EXCEL做報表
  3. 宝塔面板——超牛逼的服务器管理软件+百度云端口组放行
  4. [转载] Motorola——Milestone XT702添加删除桌面图标
  5. POJ 1846 System 笔记
  6. python回声程序echo 一行代码_Python Socket 编程示例 Echo Server
  7. 转:自动化测试的7个步骤
  8. 计算机桌面屏幕设置,双显示器设置:如何设置一台电脑两个显示器
  9. 扛住 100 亿次请求—如何做一个“有把握”的春晚红包系统?
  10. 我的WafBypass之道(SQL注入篇)