OpenCV之图片预处理方法
一、图片预处理
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之图片预处理方法相关推荐
- ctf 改变图片高度_每天一分钟,python一点通(opencv的图片处理方法)
有网友私信小编说,小编的文章很好,讲解的也很详细,但是有些知识点很深奥,对初学者不是很友好,回想小编的文章虽然几乎每条代码都有介绍,但是很多函数没有太详细,小编后期会重启 <每天一分钟,pyth ...
- opencv缩小图片的方法
scaling_factor = 0.4 img_scaled = cv2.resize(img, None, fx=scaling_factor, fy=scaling_factor,interpo ...
- python切割图片文字_Python+opencv 实现图片文字的分割的方法示例
Python+opencv 实现图片文字的分割的方法示例 发布时间:2020-08-26 03:28:37 来源:脚本之家 阅读:116 作者:坏小孩90 实现步骤: 1.通过水平投影对图形进行水平分 ...
- cv2 inrange灰度图_Python opencv将图片转为灰度图的方法示例
这篇文章主要介绍了python opencv将图片转为灰度图的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 使用ope ...
- 通过opencv标记图片以及写入Excel小方法
通过opencv标记图片以及写入Excel小方法 通过opencv根据坐标绘制图片框,然后保存图片 将结果读入并且写入Excel中进行保存 Python strip() 方法用于移除字符串头尾指定的字 ...
- python头像转卡通_Python实现将照片变成卡通图片的方法【基于opencv】
本文实例讲述了Python实现将照片变成卡通图片的方法.分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的 ...
- python3 opencv 基于二值化图像素投影的图片切割方法
对于一些背景纯色,结构相对简单的图,可以利用传统的opencv图像处理进行分割.先来记录一下基于二值化图像素投影的图片切割方法的实现.比如下面这张图,可以利用这个算法进行切割.(源代码在最后面) 切割 ...
- python照片转卡通_Python实现将照片变成卡通图片的方法【基于opencv】
本文实例讲述了Python实现将照片变成卡通图片的方法.分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的 ...
- python人像变卡通,Python实现将照片变成卡通图片的方法【基于opencv】
本文实例讲述了Python实现将照片变成卡通图片的方法.分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的 ...
最新文章
- flume源码学习8-hdfs sink的具体写入流程
- pip freeze requirements.txt 分隔 sudo pip install -r requirements.txt
- cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用
- 【资源】MIT 更新最大自然灾害图像数据集,囊括 19 种灾害事件
- 人工智能在语音和数字图像处理领域有哪些具体化应用_智能呼叫中心系统有哪些优势...
- vector cbegin_vector :: cbegin()函数以及C ++ STL中的示例
- iOS 第五期考核题(字典与数组嵌套,字典的排序/删除)
- 计算机软件理论基础集合论,从数理逻辑观点看计算机专业的理论基础探讨
- 连接DB2 抛异常SQL Error SQLCODE=-204, SQLSTATE=42704
- 使用 IntraWeb (29) - 基本控件之 TIWAutherList、TIWAutherINI、TIWAutherEvent
- 「代码随想录」746. 使用最小花费爬楼梯【动态规划】力扣详解!
- CADisplaylink初解
- 引用了System.Configuration命名空间,却找不到ConfigurationManager类
- 算法导论8-5习题解答(平均排序)
- 中文文本拼写检查错误纠正方案整理
- 统计学原理 数值型数据的整理与展示
- 树莓派linux下载机,树莓派打造北邮人种子下载机——下载、做种一条龙全站式教程...
- 游戏开发之Unity2021智能导航地图烘焙
- 如何树立正确的工作态度
- 【黑客故事】钢铁侠Musk的音影记录
热门文章
- C++ 关于回车和换行
- C#利用EXCEL做報表
- 宝塔面板——超牛逼的服务器管理软件+百度云端口组放行
- [转载] Motorola——Milestone XT702添加删除桌面图标
- POJ 1846 System 笔记
- python回声程序echo 一行代码_Python Socket 编程示例 Echo Server
- 转:自动化测试的7个步骤
- 计算机桌面屏幕设置,双显示器设置:如何设置一台电脑两个显示器
- 扛住 100 亿次请求—如何做一个“有把握”的春晚红包系统?
- 我的WafBypass之道(SQL注入篇)