1  灰度图

  1. import cv2 # opencv读取的格式是BGR
  2. import numpy as np
  3. import matplotlib.pyplot as plt # Matplotlib是RGB
  4. %matplotlib inline
  5.  
  6. img=cv2.imread('cat.jpg')
  7. img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  8. img_gray.shape

cv2.imshow("img_gray", img_gray)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

2  HSV

  • H - 色调(主波长)。
  • S - 饱和度(纯度/颜色的阴影)。
  • V值(强度)
  1. hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
  2.  
  3. cv2.imshow("hsv", hsv)
  4. cv2.waitKey(0)
  5. cv2.destroyAllWindows()

3  图像阈值

参考上篇博客中的 基于颜色提出目标

  1. # 1.将RGB转换成HSV色彩空间
  2. hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
  3.  
  4. # 2.定义数组,说明你要提取(过滤)的颜色目标
  5. # 三通道,所以是三个参数
  6. # 红色
  7. lower_hsv_r = np.array([156, 43, 46])
  8. upper_hsv_r = np.array([180, 255, 255])
  9.  
  10. # 3.进行过滤,提取,得到二值图像
  11. 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的反转
  1. ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
  2. ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
  3. ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
  4. ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
  5. ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)
  6.  
  7. titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
  8. images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
  9.  
  10. for i in range(6):
  11. plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
  12. plt.title(titles[i])
  13. plt.xticks([]), plt.yticks([])
  14. plt.show()

4  图像平滑(利用各种卷积核)

  1. img = cv2.imread('lenaNoise.png') # 椒盐噪音
  2.  
  3. cv2.imshow('img', img)
  4. cv2.waitKey(0)
  5. cv2.destroyAllWindows()

  1. # 均值滤波
  2. # 简单的平均卷积操作
  3. blur = cv2.blur(img, (3, 3))
  4.  
  5. cv2.imshow('blur', blur)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
  1. # 方框滤波
  2. # 基本和均值一样,可以选择归一化
  3. box = cv2.boxFilter(img,-1,(3,3), normalize=True)
  4.  
  5. cv2.imshow('box', box)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
  1. # 高斯滤波
  2. # 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
  3. aussian = cv2.GaussianBlur(img, (5, 5), 1)
  4.  
  5. cv2.imshow('aussian', aussian)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
  1. # 中值滤波
  2. # 相当于用中值代替
  3. median = cv2.medianBlur(img, 5) # 中值滤波
  4.  
  5. cv2.imshow('median', median)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
  1. # 展示所有的
  2. res = np.hstack((blur,aussian,median))
  3. #print (res)
  4. cv2.imshow('median vs average', res)
  5. cv2.waitKey(0)
  6. cv2.destroyAllWindows()

5  形态学-腐蚀操作

02_opencv_python_图像处理进阶的更多相关文章

  1. PHP学习笔记 - 进阶篇(2)

    PHP学习笔记 - 进阶篇(2) 函数 1.自定义函数 PHP内置了超过1000个函数,因此函数使得PHP成为一门非常强大的语言.大多数时候我们使用系统的内置函数就可以满足需求,但是自定义函数通过将一 ...

  2. Kinect for Windows SDK开发入门(15):进阶指引 下

    Kinect for Windows SDK开发入门(十五):进阶指引 下 上一篇文章介绍了Kinect for Windows SDK进阶开发需要了解的一些内容,包括影像处理Coding4Fun K ...

  3. Python语言学习之Python入门到进阶

    人们常说Python语言简单,编写简单程序时好像也确实如此.但实际上Python绝不简单,它也是一种很复杂的语言,其功能特征非常丰富,能支持多种编程风格,在几乎所有方面都能深度定制.要想用好Pytho ...

  4. Photoshop零基础教程集锦,助你快速进阶为大佬,轻松、任性!!!

    现今,对于Web或App UI设计师而言,除了不断学习专业知识,提升设计技能.掌握一款得心应手的设计工具(例如设计师们常用的图像处理工具PhotoShop,矢量图绘制工具AI, 图形视频处理工具AE, ...

  5. opencv图像处理基础 (《OpenCV编程入门--毛星云》学习笔记一---五章)

    #include <QCoreApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgu ...

  6. 年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库

    我是 环境管理 管理 Python 版本和环境的工具 pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环 ...

  7. 我的Android进阶之旅------>Android中编解码学习笔记

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  8. iOS 开发技术栈与进阶

    最近有一些开发朋友问我应该怎样提升自己的能力,回想起来做了这么久 iOS 开发,我也有过那种“让我做一个功能实现个需求我会做,但接下来怎样提高我不知道.”的时期,这里尝试列一下 iOS 开发的相关技术 ...

  9. FPGA经典:Verilog传奇与基于FPGA的数字图像处理原理及应用

    一 简述 最近恶补基础知识,借了<<Verilog传奇>>,<基于FPGA的嵌入式图像处理系统设计>和<<基千FPGA的数字图像处理原理及应用>& ...

随机推荐

  1. AI换脸实战教学(FaceSwap的使用)---------第一步Extration:提取人脸。

    市面上有多款AI换脸的方法,笔者这里节选了Github那年很火的开源项目FaceSwap: (很早就实践了,但是忘记记录啦hhh,请勿用于不正当用途哦) 做了一篇详细教学,包括配置,参数设置,换脸效果 ...

  2. 合宙AIR105使用Keil MDK + DAP-Link 烧录和调试

    关于AIR105 AIR105是合宙LuatOS生态下的一款芯片, 1月初上市, 开发板与摄像头一起搭售(赠送). 从配置信息看, 芯片性能相当不错: Cortex-M4F内核, 最高频率204Mhz ...

  3. H264 编解码协议

    1.概述 H264是MPEG-4标准所定义的最新编码格式,同时也是技术含量最高.代表最新技术水平的视频编码格式之一,标准写法应该是H.264.H.264视频格式是经过有损压缩的,但是在技术上尽可能做到 ...

  4. Codeforces Round #740 Div. 2

    题目跳转链接 A. Simply Strange Sort 题意 定义一个函数\(f_{i}\) : 如果\(a_i \ge a_{i+1}\) swap(\(a_i\) \(a_{i+1}\)) 定 ...

  5. eslint规则详解

    { // 环境定义了预定义的全局变量. "env": { //环境定义了预定义的全局变量.更多在官网查看 "browser":true, "node& ...

  6. ARC-124 部分题解

    E 直接统计原式不好做,注意到首先我们应该知道怎样的 \(x\) 序列是合法的,那么不妨首先来统计一下合法的 \(x\) 序列数量. 令 \(b_i\) 为 \(i\) 向右给的球数,那么有(\(i ...

  7. Java内存分析简单介绍

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11904422.html Java内存分析简单介绍: 1. # 设置内存溢出时自动生成堆内存快照 ...

  8. K8s二进制部署单节点 etcd集群,flannel网络配置 ——锥刺股

    K8s 二进制部署单节点 master    --锥刺股 k8s集群搭建: etcd集群 flannel网络插件 搭建master组件 搭建node组件 1.部署etcd集群 2.Flannel 网络 ...

  9. 关于LVS的问题总结

    关于LVS的问题总结 目录 关于LVS的问题总结 1. LVS工作模式及区别 2. LVS调度算法 3. LVS调度器你的常用算法(均衡策略) (1)固定调度算法:rr.wrr.dh.sh (2)动态 ...

  10. Vue3.X安装

    1.查看node.js和npm版本 $ node -v //建议v10以上版本 $ npm -v 2.若已安装了2.x的旧版本,需要先卸载 npm uninstall vue-cli -g 3.安装淘 ...