02_opencv_python_图像处理进阶
1 灰度图
- import cv2 # opencv读取的格式是BGR
- import numpy as np
- import matplotlib.pyplot as plt # Matplotlib是RGB
- %matplotlib inline
- img=cv2.imread('cat.jpg')
- img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
- img_gray.shape
cv2.imshow("img_gray", img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
2 HSV
- H - 色调(主波长)。
- S - 饱和度(纯度/颜色的阴影)。
- V值(强度)
- hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
- cv2.imshow("hsv", hsv)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
3 图像阈值
参考上篇博客中的 基于颜色提出目标
- # 1.将RGB转换成HSV色彩空间
- hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
- # 2.定义数组,说明你要提取(过滤)的颜色目标
- # 三通道,所以是三个参数
- # 红色
- lower_hsv_r = np.array([156, 43, 46])
- upper_hsv_r = np.array([180, 255, 255])
- # 3.进行过滤,提取,得到二值图像
- mask_red = cv2.inRange(hsv, lower_hsv_r, upper_hsv_r) # 通道数是 1
3.1 ret, dst = cv2.threshold(src, thresh, maxval, type)
- src: 输入图,只能输入单通道图像,通常来说为灰度图
- dst: 输出图
- thresh: 阈值
- maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0
- cv2.THRESH_BINARY_INV THRESH_BINARY的反转
- cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
- cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
- cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
- ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
- ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
- ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
- ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
- ret, thresh5 = cv2.threshold(img_gray, 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()
4 图像平滑(利用各种卷积核)
- img = cv2.imread('lenaNoise.png') # 椒盐噪音
- cv2.imshow('img', img)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- # 均值滤波
- # 简单的平均卷积操作
- blur = cv2.blur(img, (3, 3))
- cv2.imshow('blur', blur)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- # 方框滤波
- # 基本和均值一样,可以选择归一化
- box = cv2.boxFilter(img,-1,(3,3), normalize=True)
- cv2.imshow('box', box)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- # 高斯滤波
- # 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
- aussian = cv2.GaussianBlur(img, (5, 5), 1)
- cv2.imshow('aussian', aussian)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- # 中值滤波
- # 相当于用中值代替
- median = cv2.medianBlur(img, 5) # 中值滤波
- cv2.imshow('median', median)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- # 展示所有的
- res = np.hstack((blur,aussian,median))
- #print (res)
- cv2.imshow('median vs average', res)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
5 形态学-腐蚀操作
02_opencv_python_图像处理进阶的更多相关文章
- PHP学习笔记 - 进阶篇(2)
PHP学习笔记 - 进阶篇(2) 函数 1.自定义函数 PHP内置了超过1000个函数,因此函数使得PHP成为一门非常强大的语言.大多数时候我们使用系统的内置函数就可以满足需求,但是自定义函数通过将一 ...
- Kinect for Windows SDK开发入门(15):进阶指引 下
Kinect for Windows SDK开发入门(十五):进阶指引 下 上一篇文章介绍了Kinect for Windows SDK进阶开发需要了解的一些内容,包括影像处理Coding4Fun K ...
- Python语言学习之Python入门到进阶
人们常说Python语言简单,编写简单程序时好像也确实如此.但实际上Python绝不简单,它也是一种很复杂的语言,其功能特征非常丰富,能支持多种编程风格,在几乎所有方面都能深度定制.要想用好Pytho ...
- Photoshop零基础教程集锦,助你快速进阶为大佬,轻松、任性!!!
现今,对于Web或App UI设计师而言,除了不断学习专业知识,提升设计技能.掌握一款得心应手的设计工具(例如设计师们常用的图像处理工具PhotoShop,矢量图绘制工具AI, 图形视频处理工具AE, ...
- opencv图像处理基础 (《OpenCV编程入门--毛星云》学习笔记一---五章)
#include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgu ...
- 年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库
我是 环境管理 管理 Python 版本和环境的工具 pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环 ...
- 我的Android进阶之旅------>Android中编解码学习笔记
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...
- iOS 开发技术栈与进阶
最近有一些开发朋友问我应该怎样提升自己的能力,回想起来做了这么久 iOS 开发,我也有过那种“让我做一个功能实现个需求我会做,但接下来怎样提高我不知道.”的时期,这里尝试列一下 iOS 开发的相关技术 ...
- FPGA经典:Verilog传奇与基于FPGA的数字图像处理原理及应用
一 简述 最近恶补基础知识,借了<<Verilog传奇>>,<基于FPGA的嵌入式图像处理系统设计>和<<基千FPGA的数字图像处理原理及应用>& ...
随机推荐
- AI换脸实战教学(FaceSwap的使用)---------第一步Extration:提取人脸。
市面上有多款AI换脸的方法,笔者这里节选了Github那年很火的开源项目FaceSwap: (很早就实践了,但是忘记记录啦hhh,请勿用于不正当用途哦) 做了一篇详细教学,包括配置,参数设置,换脸效果 ...
- 合宙AIR105使用Keil MDK + DAP-Link 烧录和调试
关于AIR105 AIR105是合宙LuatOS生态下的一款芯片, 1月初上市, 开发板与摄像头一起搭售(赠送). 从配置信息看, 芯片性能相当不错: Cortex-M4F内核, 最高频率204Mhz ...
- H264 编解码协议
1.概述 H264是MPEG-4标准所定义的最新编码格式,同时也是技术含量最高.代表最新技术水平的视频编码格式之一,标准写法应该是H.264.H.264视频格式是经过有损压缩的,但是在技术上尽可能做到 ...
- Codeforces Round #740 Div. 2
题目跳转链接 A. Simply Strange Sort 题意 定义一个函数\(f_{i}\) : 如果\(a_i \ge a_{i+1}\) swap(\(a_i\) \(a_{i+1}\)) 定 ...
- eslint规则详解
{ // 环境定义了预定义的全局变量. "env": { //环境定义了预定义的全局变量.更多在官网查看 "browser":true, "node& ...
- ARC-124 部分题解
E 直接统计原式不好做,注意到首先我们应该知道怎样的 \(x\) 序列是合法的,那么不妨首先来统计一下合法的 \(x\) 序列数量. 令 \(b_i\) 为 \(i\) 向右给的球数,那么有(\(i ...
- Java内存分析简单介绍
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11904422.html Java内存分析简单介绍: 1. # 设置内存溢出时自动生成堆内存快照 ...
- K8s二进制部署单节点 etcd集群,flannel网络配置 ——锥刺股
K8s 二进制部署单节点 master --锥刺股 k8s集群搭建: etcd集群 flannel网络插件 搭建master组件 搭建node组件 1.部署etcd集群 2.Flannel 网络 ...
- 关于LVS的问题总结
关于LVS的问题总结 目录 关于LVS的问题总结 1. LVS工作模式及区别 2. LVS调度算法 3. LVS调度器你的常用算法(均衡策略) (1)固定调度算法:rr.wrr.dh.sh (2)动态 ...
- Vue3.X安装
1.查看node.js和npm版本 $ node -v //建议v10以上版本 $ npm -v 2.若已安装了2.x的旧版本,需要先卸载 npm uninstall vue-cli -g 3.安装淘 ...