opencv——常见的操作
一 图像阈值处理
准备一张灰度图像

阈值处理通常是设定一个阈值,让图片的所有像素点的值与其比较做出一系列的操作。
在opencv常用的阈值处理函数有五种,分别是THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO、THRESH_TOZERO_INV。接下来分别看下这几种处理图片后的效果
1. THRESH_BINAR
# 像素值超过127的变成255,否则为0,亮的更亮
ret,threshold1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
2. THRESH_BINARY_INV
![]()
# 像素值超过127的变成0,否则为255,亮的更暗
ret,threshold2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
3. THRESH_TRUNC
# 像素值超过127的变成127,否则不变,理解成图片整体变暗
ret,threshold3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
4. THRESH_TOZERO
# 像素值超过127的不变,否则为0,理解成加大图片的对比度
ret,threshold4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
5. THRESH_TOZERO_INV
# 像素值超过127的为0,否则不变
ret,threshold5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
阈值处理的使用场景我会在后续的博客中写出~~~
二 . 滤波
滤波的原理是通过指定大小的单位矩阵与图像做相关运算,具体的线性代数的东西这里不展开,若后续工作会深入,再回来完善...
经常使用到的滤波操作有三种,均值滤波、高斯滤波、中位值滤波。
1.均值滤波(通过求与单位矩阵做内积和的平均值做图像处理)
blur = cv2.blur(img,(3,3))
2. 高斯滤波 (根据正态分布处理图像,越靠近中心点,值越接近)
blur2 = cv2.GaussianBlur(img,(3,3),1)
3. 中位值滤波(取指定大小矩阵的所有元素值的中位值处理)
blur3 = cv2.medianBlur(img,5)
把这几张图片水平拼接观察,不难发现在处理噪点的场景中,使用中位值滤波效果最为明显

三. 腐蚀与膨胀
1. 腐蚀
img = cv2.imread("test.png")
img2 = cv2.erode(img,kernel=numpy.ones((9,9),numpy.uint8),iterations=9) 和单位矩阵做处理,迭代9次,意味这腐蚀的程度
cv2.imshow("IMage",numpy.hstack((img,img2)))
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 膨胀 (嗯,和腐蚀操作刚好相反)
img2 = cv2.dilate(img,kernel=numpy.ones((9,9),numpy.uint8),iterations=9)
cv2.imshow("IMage",numpy.hstack((img,img2)))
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 梯度运算(膨胀-腐蚀)

4. 礼帽与黑帽
img2 = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel=numpy.ones((5,5),numpy.uint8)) # 就是腐蚀掉的部分
img3 = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel=numpy.ones((5,5),numpy.uint8)) # 原始部分的外壳
四. 图像梯度与边缘检测
1.Sobel算子



这里的图片借鉴自https://blog.csdn.net/JimmyFu0055/article/details/83718901
Gx,Gy分别代表水平与竖直方向上的梯度
原图:

img = cv2.imread("test.png")
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3) # 1,0代表求水平dx方向上的梯度
sobelx = cv2.convertScaleAbs(sobelx)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3) # 0,1代表求水平dy方向上的梯度
sobely = cv2.convertScaleAbs(sobely)
sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
sobelxy2 = cv2.Sobel(img,cv2.CV_64F,1,1,ksize=3) # 不推荐这一种方法求边界
cv2.imshow("IMage",sobelxy)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果:

结语:这段时间工作实在太忙了,不是评论提醒都快忘记继续写博客了,这部分的内容学过比较久了,今天整理一下方便他人也方便自己。
——2019-10-17 22:42:32
opencv——常见的操作的更多相关文章
- opencv笔记4:模板运算和常见滤波操作
time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...
- c#常见stream操作
原文: c#常见stream操作 常见并常用的stream一共有 文件流(FileStream), 内存流(MemoryStream), 压缩流(GZipStream), 加密流(CrypToStre ...
- java常见文件操作
收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...
- touch.js——常见应用操作
touch.js--常见应用操作 基本事件: touchstart //手指刚接触屏幕时触发 touchmove //手指在屏幕上移动时触发 touchend //手指从屏幕上移开时 ...
- Selenium 定位页面元素 以及总结页面常见的元素 以及总结用户常见的操作
1. Selenium常见的定位页面元素 2.页面常见的元素 3. 用户常见的操作 1. Selenium常见的定位页面元素 driver.findElement(By.id());driver.fi ...
- Python 常见文件操作的函数示例(转)
转自:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html # -*-coding:utf8 -*- ''''' Python常 ...
- JavaScript常见集合操作
JavaScript常见集合操作 集合的遍历 FOR循环(效率最高) 优点:JavaScript最普遍的for循环,执行效率最高 缺点:无法遍历对象 for(let i=0;i<array.le ...
- OpenCV中Mat操作clone() 与copyto()的区别
OpenCV中Mat操作clone() 与copyto()的区别 // Mat is basically a class with two data parts: the matrix header ...
- 如何用OpenCV跟踪鼠标操作
转载:如何用OpenCV跟踪鼠标操作 http://blog.skyoung.org/2014/05/01/how-to-track-mouse/ 在视频第一帧手动标记出目标的位置是在线视觉跟踪中最基 ...
随机推荐
- 力扣算法题—148sort-list
Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4->2-> ...
- 洛谷 P1198 [JSOI2008]最大数——单调栈/线段树
先上一波题目 https://www.luogu.org/problem/P1198 题目要求维护后缀最大值 以及在数列的最后面添加一个数 这道题呢我们有两种做法 1.单调栈 因为只需要维护后缀最大值 ...
- vue.js实现点击后动态添加class及删除同级class
最近使用vue需要实现一个点餐选择商品规格的页面,需要通过vue动态的给被点击的元素添加class名字,使其变色,其他的删除class.如图: 开始在网上找了许多办法发现不是太好用,最后找到一个发现还 ...
- 利用os和pandas来合并当前目录下所有excel文件
#1.引入模块 import os import pandas as pd #2.取出指定目录下的全部excel文件路径 path="C:\\TEST" dirlist=[] fo ...
- linux python2.6升级2.7
一.升级 Python 2.7.10 版本 1. 准备安装包,系统是最小化安装 # 下载安装依赖的相关包[root@vip ~]# yum install vim gcc make wget -y [ ...
- python3中浮点数相减问题(大部分时候只需要关注整数的二进制形式就行了)
首先直接上判断方法:一切判断直接将整数部分装化成二进制,如果位数相等则相减后的值是等于的,如果不相等,相减大的结果一定不等于你要比较的结果. 如66.6-60.6==6.0的情况,66.6的二进制:1 ...
- CentOS6.5下面OpenSSH低版本升级至7.3
升级前版本: openssl-1.0.1e-48.el6_8.1.x86_64 openssh-5.3p1-118.1.el6_8.x86_64 升级后版本: OpenSSL 1.0.2j OpenS ...
- enovia PLM: add characteristic to both prototype and product
Issue: add new mandatory attribute named LUX_HazardousMaterial to protoype and product, and export t ...
- Stm32 控制1.44寸液晶显示图片 基于stm32f051k8u6
在线图片转BMP格式:https://app.xunjiepdf.com/img2bmp 一.使用工具对图片生成字符数组 1. 使用1.44寸的液晶其像素是128*128的16位真彩,则需要把图片调整 ...
- 认识和学习BASH alias 给长命令起别名 unalias 取消该别名
此图反映了shell所在的位置与作用. 既然Shell与KDE和application等都是用户与Kernel的接口,那为什么还要学习呢?书中也给出了答案. 通用性,可以这样理解,也就是所谓的跨平台机 ...


