2. 使用OpenCV3处理图像

2.1 不同色彩空间的转换

OpenCV中有数百种关于在不同色彩空间之间转换的方法。

三种常用色彩空间:灰度、BGR、HSV(Hue色调,Saturation饱和度,Value亮度)

注:计算机遵从加色模型,而绘画遵从减色模型。

2.2 傅里叶变换

傅里叶变换作用:可以用来区分图像里哪些区域的信号变化特别强,哪些不那么强,

从而可以任意标记噪声区域、感兴趣区域、前景和背景。

幅度谱(magnitude spectrum):图像的幅度谱是另一种图像,幅度谱图像呈现了

原始图像在变化方面的一种表示:把一幅图像中最亮的像素放中间,然后逐渐变暗,

在边缘上的像素最暗。这样可以发现图像中有多少亮的像素和暗的像素,以及他们

分布的百分比。

2.2.1 高通滤波器(HPF)

知识准备:核是指一组权重的组合,它会应用的在源图像的一个区域,并由此产生目标图像的一个像素。

比如:大小为7的核意味着每49(7*7)个源图像的像素会产生目标图像的一个像素。

import cv2
import numpy as np
from scipy import ndimage
kernel_3x3 = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]]) kernel_5x5 = np.array([[-1, -1, -1, -1, -1],
[-1, 1, 2, 1, -1],
[-1, 2, 4, 2, -1],
[-1, 1, 2, 1, -1],
[-1, -1, -1, -1, -1]]) img = cv2.imread("../images/statue_small.jpg", 0)
# 卷积运算
k3 = ndimage.convolve(img, kernel_3x3)
k5 = ndimage.convolve(img, kernel_5x5)
# 高斯模糊(一种低通滤波器)
blurred = cv2.GaussianBlur(img, (17,17), 0)
g_hpf = img - blurred cv2.imshow("3x3", k3)
cv2.imshow("5x5", k5)
cv2.imshow("g_hpf", g_hpf)
cv2.waitKey()
cv2.destroyAllWindows()

2.2.2 低通滤波器

高通滤波器是根据像素与邻近像素的亮度差值来提升该像素的亮度。

低通滤波器则是在像素与周围像素的亮度差值小于一个特定值时,平均该亮度的像素。

它主要用于去噪和模糊化,比如说,高斯模糊是最常用的模糊滤波器(平滑滤波器)之一,

它是一个削弱高频信号强度的低通滤波器。

2.3 创建模块

2.4 边缘检测

OpenCV提供了许多边缘检测滤波函数,包括Laplacian()、Sobel()以及Scharr()。这些

滤波函数都会将非边缘区域转换成黑色,将边缘区域转换成白色或者其它饱和的颜色。

但是,这些函数都很容易将噪声错误地识别为边缘。

缓解这个问题地办法是在找到边缘之前对图像进行模糊处理。

OpenCV提供了许多模糊滤波函数,包括blur()(简单地算术平均)、medianBlur()以及

GaussianBlur()。边缘检测滤波函数和模糊滤波函数的参数有很多,但总会有个ksize参数,

它是一个奇数,表示滤波核的宽和高(以像素为单位)。

这里使用medianBlur()作为模糊函数,它对去除数字化的视频噪声非常有效,特别是去除

彩色图像的噪声;使用Laplacian()作为边缘检测函数,它会产生明显的边缘线条,灰度图像

更是如此。在使用medianBlur()函数之后,将要使用Laplacian()函数之前,需要将图像从BGR

色彩空间转换为灰度色彩空间。

在得到Laplacian()函数的结果之后,需要将其转换成黑色边缘和背景的图像。然后将其

归一化(使它的像素值在0到1),并乘以源图像以便能使边缘变黑。

def strokeEdges(src, dst, blurKsize = 7, edgeKsize = 5):
if blurKsize >=3:
blurredSrc = cv2.medianBlur(src, blurKsize)
graySrc = cv2.cvtColor(blurredSrc, cv2.COLOR_BGR2GRAY)
else:
graySrc = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
cv2.Laplacian(graySrc, cv2.CV_8U, graySrc, ksize = edgeKsize)
normalizedInverseAlpha = (1.0/255)*(255-graySrc)
channels = cv2.split(src)
for channel in channels:
channel[:] = channel*normalizedInverseAlpha
cv2.merge(channels, dst)

注:对于较大的ksize(包括7),使用medianBlur()的代价很高。

2.5 用定制内核做卷积

Opencv-Python学习笔记(二)的更多相关文章

  1. python学习笔记(二)、字符串操作

    该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于 ...

  2. 播放一个视频并用滚动条控制进度-OpenCV应用学习笔记二

    今天我们来做个有趣的程序实现:利用OpenCV读取本地文件夹的视频文件,并且在窗口中创建拖动控制条来显示并且控制视频文件的读取进度. 此程序调试花费了笔者近一天时间,其实大体程序都已经很快写出,结果执 ...

  3. Python 学习笔记二

    笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...

  4. (10.1)Python学习笔记二

    1.在项目工程中要模块化测试一个开发的功能,在测试通过后交付给项目组其他人员继续开发.要保证代码开发的性能和效率以及可扩展性. 2.项目工程中的文件夹分类要功能模块明确清晰,在python中引入某一个 ...

  5. OpenCV for Python 学习笔记 二

    今天主要看了OpenCV中的事件以及回调函数,这么说可能不准确,主要是下面这两个函数(OpenCV中还有很多这些函数,可以在 http://docs.opencv.org/trunk/modules/ ...

  6. Python学习笔记二

    ---恢复内容开始--- 一. python几种数据类型的比较. 从以下几个方面比较: 1. 是否可变. 不可变类型:变量的值可以发生变化,id也变了,相当于创建了一个新的对象,所以一修改值,id就变 ...

  7. Python学习笔记(二)

    标识符和关键字 1,邮箱的Python标识符是任意长度的非空字符序列(引导字符+后续字符.) python标识符必须符合两条规则--标识符区分大小写 (1)只要是unicode编码字母都可以充当引导字 ...

  8. python学习笔记(二):python数据类型

    上一篇博客写了python的入门和简单流程控制,这次写python的数据类型和各种数据类型的内置方法.一.数据类型是什么鬼?计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各 ...

  9. python学习笔记二:流程控制

    一.if else: #!/usr/bin/python x = int(raw_input('please input:')) if x >= 90: if x >= 95: print ...

  10. python 学习笔记二 (列表推导式)

    2018年年初写了第一篇博客,说要做一个认真的技术人 https://www.cnblogs.com/yingchen/p/8455507.html 今天已经是11月19日了,这是第二篇博客,看来坚持 ...

随机推荐

  1. 2016310Exp5 MSF基础应用

    1. 实践目标 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_067; (1分) 1.2 一个针对浏览器的攻击, ...

  2. Redis深入学习笔记(五)Redis阻塞原因

    在实际使用Redis中,有时会碰到客户端timeout异常,或者没有可用连接异常等等异常,总结大概有如下原因: 内部阻塞原因: 1)大对象存取. 2)Fork阻塞. 3)Aof刷盘阻塞(距离上次刷盘大 ...

  3. memcached—Java操作Memcached实例

    前面博客介绍了如何在Windows操作系统中安装Memcached,总结一下如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; imp ...

  4. 检查邮箱IP是否在国际反垃圾邮件组织的黑名单中

    有时候邮件发不出去,很有可能就是邮件服务器的IP被国际上一些反垃圾组织列入黑名单了,这时你可以通过返回的邮件判断是否进入黑名单,或者通过以下查询地址看是否被列入,然后一个个申请移除: http://m ...

  5. 性能测试过程中oracle数据库报ORA-27301 ORA-27302错

    最近在性能测试过程中发现,发现虚拟用户数上不去,加载到一定的数量应用端就报错,提示连接数据库出错.在测试的过程中查看web容器的线程池 数据源的连接池 都还有空闲,同时查看oracle的v$sessi ...

  6. PHP 实现多网站共享用户SESSION 数据解决方案

    PHP 实现多网站共享用户SESSION 数据解决方案 来源URL:http://blog.csdn.net/dongdongzzcs/article/details/6906613 一.问题起源 稍 ...

  7. vue设置路由跳转参数,以及接收参数

    最近做Vue项目,遇到了一个路由跳转问题:首页要跳转到项目页指定的Tab选项卡项,一开始总是跳到默认项.解决方法如下: 在跳转链接处设置了路由跳转参数,如下: <router-link  :to ...

  8. mybatis入门篇:Mybatis高级查询

    1.ResultMap的association与collection association与collection功能类似,区别是一对一与一对多,这里以association为例. 首先说明一下需求: ...

  9. python-day5内置模块time、range、sys、os、shelve、xml、max等

    @os树状目录 import os,os.path def showdir(path,depth):    if depth==0:        print(path)    for item in ...

  10. Spring整合quart初识

    Spring集成quart有两种方式,一种是实现Job接口,一种是继承QuartzJobBean 刚开始报错:持久化时未序列化异常 <bean id="simpleJobDetail& ...