官网:https://docs.opencv.org/3.2.0/df/d9d/tutorial_py_colorspaces.html

改变颜色空间

本教程颜色空间转换:BGR ↔ Gray and BGR ↔ HSV.

cv2.cvtColor(input_image, flag)
  • input_image:输入图像
  • flag:openCV标志位,决定颜色空间转换类型,如:(BGR → Gray->flags cv2.COLOR_BGR2GRAY)、(BGR → HSV->cv2.COLOR_BGR2HSV)

获取所有颜色空间转换标志

import cv2
flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
print(flags)

目标追踪

现在我们知道如何转换BGR图像到HSV图像,我们可以使用这个去抽取一个颜色对象。HSV比BGR颜色空间更容易去表示一个颜色,在我们的应用中,我们尝试去抽取一个蓝色的颜色对象,具体描述:

1、提取视频的每一帧

2、从BGR颜色空间转换到HSV颜色空间

3、我们为HSB图像设置一个蓝色范围的阈值

4、现在单独提取这个蓝色对象

官方示例代码:

import cv2
import numpy as np cap = cv2.VideoCapture(0)
while (1):
# 获取每一帧
_, frame = cap.read()
# Convert BGR to HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# define range of blue color in HSV
lower_blue = np.array([110, 50, 50])
upper_blue = np.array([130, 255, 255])
# 将HSV图像阈值化以仅获得蓝色
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 按位与操作
res = cv2.bitwise_and(frame, frame, mask=mask)
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()

蓝色物体追踪展示:

注意:

1、在这张图片上有一些噪声,在之后的章节中我们将看到如何移除他们

2、这是物体追踪的最简单方式,一但你学习了轮廓函数,你将可以做更多的事情

如何找到要追踪的HSV值

很多常见的问题可以在stackoverflow.com,最简单的方式是使用cv2.cvtColor()函数,你可以传递一个你想要的BGR值而不是一张图片。例如:寻找绿色的HSV值:

import cv2
import numpy as np green = np.uint8([[[0,255,0 ]]])
hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print(hsv_green)

图像的几何变换

目标:

  学习对图像使用应用不同的几何变换,如:平移、旋转、放射变换等。

缩放

缩放仅仅是改变图像的大小,OpenCV自带了函数cv2.resize()来完成这个目标。图片的大小可以手动指定,也可以通过缩放因子来指定。图像所方式有很多插值方法可以使用,默认使用cv2.INTER_LINEAR

import cv2
import numpy as np
img = cv2.imread('messi5.jpg')
res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)
#OR
height, width = img.shape[:2]
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)

收缩时推荐:cv2.INTER_AREA

放大时推荐:cv2.INTER_CUBIC (slow) & cv2.INTER_LINEAR

平移

import cv2
import numpy as np
img = cv2.imread('messi5.jpg',0)
rows,cols = img.shape
M = np.float32([[1,0,100],[0,1,50]])
dst = cv2.warpAffine(img,M,(cols,rows))
cv2.imshow('img',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

警告:warpAffine的第三个参数是输出图像的大小,他的形式应该是(width,height),宽等于列的数量,高等于行的数量,关于M矩阵的信息可以参考https://blog.csdn.net/keith_bb/article/details/56331356

旋转

为了找到旋转的变换矩阵,OpenCV提供了一个函数cv2.getRotationMatrix2D。检查下面的例子,旋转90度的图像相对于中心没有任何缩放。
img = cv2.imread('messi5.jpg',0)
rows,cols = img.shape
M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
dst = cv2.warpAffine(img,M,(cols,rows))

放射变换

在仿射变换中,原图像中的所有平行线在输出图像中仍然是平行的。为了找到变换矩阵,我们需要从输入图像中得到三个点,以及它们在输出图像中的对应位置。然后cv2。getAffineTransform将创建一个2x3矩阵,该矩阵将传递给cv2.warpaffine

img = cv2.imread('drawing.png')
rows,cols,ch = img.shape
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
M = cv2.getAffineTransform(pts1,pts2)
dst = cv2.warpAffine(img,M,(cols,rows))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')

平滑图像

1、学习使用各种低通过滤器过滤图像

2、对图像使用自定义过滤器

二维卷积(图像滤波)

与一维信号一样,图像也可以用各种低通滤波器(LPF)、高通滤波器(HPF)等进行滤波。LPF有助于去除噪声,模糊图像等。HPF滤波器有助于在图像中找到边缘。

OpenCV提供了一个函数cv2.filter2D()来卷积内核与图像。例如,我们将尝试对图像进行平均滤波。一个5x5的平均滤波内核如下所示:

 

操作方法是这样的:将该内核保持在一个像素之上,将该内核之下的所有25个像素相加,取其平均值,然后用新的平均值替换中心像素。它继续对图像中的所有像素进行此操作。请尝试此代码并检查结果
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('opencv_logo.png')
kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()

openCV 二 图像处理的更多相关文章

  1. 海康威视摄像头+OpenCV+VS2017 图像处理小结(二)

    海康威视摄像头+OpenCV+VS2017 图像处理小结(二) https://blog.csdn.net/o_ha_yo_yepeng/article/details/79825648 目录 一.海 ...

  2. windows平台下基于QT和OpenCV搭建图像处理平台

        在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...

  3. 【图像处理】使用OpenCV进行图像处理教程(一)

    OpenCV是进行图像处理的工具,也是计算机视觉领域近十几年不断发展和完善的产物.面对这个已基本成熟的开源库知识体系,我们新生代有必要不断地总结.回顾,以新的视角快速融入计算机视觉的奥秘世界. 从这篇 ...

  4. 【图像处理】OpenCV+Python图像处理入门教程(四)几何变换

    这篇随笔介绍使用OpenCV进行图像处理的第四章 几何变换. 4  几何变换 图像的几何变换是指将一幅图像映射到另一幅图像内.有缩放.翻转.仿射变换.透视.重映射等操作. 4.1  缩放 使用cv2. ...

  5. 【图像处理】OpenCV+Python图像处理入门教程(五)阈值处理

    这篇随笔介绍使用OpenCV进行图像处理的第五章 阈值处理. 5  阈值处理 阈值是指像素到达某临界值.阈值处理表示像素到达某临界值后,对该像素点进行操作和处理. 例如:设定一幅图像素阈值为200,则 ...

  6. 【图像处理】OpenCV+Python图像处理入门教程(六)图像平滑处理

    相信很多小伙伴都听过"滤波器"这个词,在通信领域,滤波器能够去除噪声信号等频率成分,然而在我们OpenCV中,"滤波"并不是对频率进行筛选去除,而是实现了图像的 ...

  7. 【图像处理】OpenCV+Python图像处理入门教程(七)图像形态学操作

    图像形态学主要从图像内提取分量信息,该分量信息通常对表达图像的特征具有重要意义.例如,在车牌号码识别中,能够使用形态学计算其重要特征信息,在进行识别时,只需对这些特征信息运算即可.图像形态学在目标视觉 ...

  8. 使用Python+OpenCV进行图像处理(二)| 视觉入门

    [前言]图像预处理对于整个图像处理任务来讲特别重要.如果我们没有进行恰当的预处理,无论我们有多么好的数据也很难得到理想的结果. 本篇是视觉入门系列教程的第二篇.整个视觉入门系列内容如下: 理解颜色模型 ...

  9. Qt:&OpenCV—Q图像处理基本操作(Code)

    原文链接:http://www.cnblogs.com/emouse/archive/2013/03/31/2991333.html 作者写作一系列:http://www.cnblogs.com/em ...

随机推荐

  1. RMQ的ST算法

    ·RMQ的ST算法    状态设计:        F[i, j]表示从第i个数起连续2^j个数中的最大值    状态转移方程(二进制思想):        F[i, j]=max(F[i,j-1], ...

  2. php正则表达式的学习

    真的发现什么都需要这个 所以还是来把它学了吧 正则表达式的基本知识汇总 行定位符(^与$) 行定位符是用来描述字符串的边界.“$”表示行结尾“^”表示行开始如"^de",表示以de ...

  3. servlet与jsp的九大内置对象

  4. 1436:数列分段II

    1436:数列分段II 题解 二分答案 我们最终答案的取值区间是[  max(a[i])  ,   ∑a[i]  ] 设定 l=max(a[i]) , r=∑a[i]  , mid不断二分 mid表示 ...

  5. docker-compose部署redis-cluster

    node1-node6 1.到http://download.redis.io/redis-stable/redis.conf下载官方redis.conf文件 2.修改对应端口 # bind 127. ...

  6. 转 Go语言基本类型 —— 字符类型

    https://blog.csdn.net/FHD994603831/article/details/92435724 字符类型Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用b ...

  7. leetcode 34在排序数组中查找元素的第一个和最后一个位置

    class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { ve ...

  8. 【转】How-to: Enable User Authentication and Authorization in Apache HBase

    With the default Apache HBase configuration, everyone is allowed to read from and write to all table ...

  9. RN的win7开发环境部署和问题解决

    1安装node,配置环境变量 2.安装Android studioe,配置环境变量 3.安装python2 注意 Node 的版本必须高于 8.3,Python 的版本必须为 2.x(不支持 3.x) ...

  10. Ubuntu16.04小白入门分享之 玩转Ruby你需要安装什么软件(持续更新)

    Ubuntu提示功能很强大,一般如果你想安装什么软件,可以直接输入名字,然后会有提示,安装格式一般为: sudo apt install 名字 Ubuntu14.04/16.04命令行快速安装Ruby ...