博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openCV 二 图像处理
阅读量:6822 次
发布时间:2019-06-26

本文共 3485 字,大约阅读时间需要 11 分钟。

官网:

改变颜色空间

本教程颜色空间转换: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 cv2flags = [i for i in dir(cv2) if i.startswith('COLOR_')]print(flags)

 目标追踪

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

1、提取视频的每一帧

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

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

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

官方示例代码:

import cv2import numpy as npcap = 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:        breakcv2.destroyAllWindows()

蓝色物体追踪展示:

注意:

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

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

如何找到要追踪的HSV值

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

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

 图像的几何变换

目标:

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

缩放

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

import cv2import numpy as npimg = cv2.imread('messi5.jpg')res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)#ORheight, 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 cv2import numpy as npimg = cv2.imread('messi5.jpg',0)rows,cols = img.shapeM = 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矩阵的信息可以参考

旋转

为了找到旋转的变换矩阵,OpenCV提供了一个函数cv2.getRotationMatrix2D。检查下面的例子,旋转90度的图像相对于中心没有任何缩放。
img = cv2.imread('messi5.jpg',0)rows,cols = img.shapeM = 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.shapepts1 = 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 cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('opencv_logo.png')kernel = np.ones((5,5),np.float32)/25dst = 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()

 

转载于:https://www.cnblogs.com/zhumengke/p/10196288.html

你可能感兴趣的文章
Android开发中如何改变RadioButton背景图片和文字的相对位置
查看>>
如何给Linux (Fedora Ubuntu等)安装字体
查看>>
MySQL大小写敏感问题和命名规范
查看>>
java 获取时间 和 转换时间
查看>>
Redis主从复制
查看>>
mysql-5.6.26 主主复制
查看>>
SpringMVC权限管理
查看>>
ET120以太网环回器介绍
查看>>
ActiveMQ快速入门
查看>>
java自学篇之程序设计基础
查看>>
swiper的基础使用(五)
查看>>
Windows Server 2012R2 Hyper-v之虚拟机复制(2)
查看>>
大数据各种实用网站
查看>>
win7安装laravel
查看>>
Oracle 各后台进程功能说明
查看>>
屏蔽storm ui的kill功能
查看>>
我的友情链接
查看>>
Oracle Decode函数的使用
查看>>
MSF学习笔记
查看>>
经典脚本案例--check memory
查看>>