官网: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. sqli-labs(43)

    0X01和42关比起来 只是闭合变了 那么我们可以构造 ');insert into users values(98,'zhong','zhong')# 成功注入

  2. 分布式-网络通信-IO-基础(1)

    IO整体图架构  一.IO流概述 概述: IO流简单来说就是Input和Output流,IO流主要是用来处理设备之间的数据传输,Java对于数据的操作都是通过流实现,而java用于操作流的对象都在IO ...

  3. C++入门经典-例5.18-通过引用交换数值

    1:在C++中,函数参数的传递方式主要有两种,即值传递和引用传递.值传递是指在函数调用时,将实际参数的值赋值一份传递到调用函数中,这样如果在调用函数中修改了参数的值,其改变将不会影响到实际参数的值.而 ...

  4. 190707Python-MySQL

    一.Python连接MySQL import pymysql conn = pymysql.connect(host='192.168.100.4', port=3306, user='dongfei ...

  5. EBS 清除高速缓存

    以R12.1.3为例: 以 “功能管理员 ”职责打开OAF界面 然后依次点击“核心服务”->“高速缓存结构”->“全局配置”->“清除所有高速缓存”->“是”,即可

  6. 了解一下urlencode()函数

    urlencode()函数 在PHP官方网站中的解释如下: 编码 URL 字符串——就是对特殊字符进行编码转移(.  _  -  除外): string urlencode ( string $str ...

  7. Uep弹窗showModalDialog的使用

    function imageMaintain() { $.showModalDialog($$pageContextPath + "uepI/imageMaintain.do?service ...

  8. leetcode 63 不同路径II

    二维数组动态规划,还可以采用一维数组进行动态规划. class Solution { public: int uniquePathsWithObstacles(vector<vector< ...

  9. jqGrid整理笔记

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  10. nfs服务安装部署测试

    nfs:网络文件系统作用:某个文件或目录共享,使其它用户可以通过网络访问此共享目录或文件.***特别注意共享的目录权限1.使用nfs需要先安装 yum install -y nfs-utils rpc ...