OpenCV自学记录(1)——(一拳超人)图像处理基础(图像获取、图像变化)

学习深度学习进行图像分类和目标检测时,要有一定的图像处理的基础。在学习深度学习之前,看了一本《图像处理技术基础》,现在也忘得差不多了,后悔当初没有整理记录下来。现在整理一下图像处理的常用方法,最后实现一个小项目——基于OpenCV的车牌号识别。

1、图像获取

1.1获取图像数据

函数cv2.imread() 来实现

import cv2
gray_img = cv2.imread('02.jpg',0) # 读入图像
cv2.imshow('Image', gray_img) # 显示图像
cv2.imwrite('images/output.jpg', gray_img)     # 保存图像
cv2.waitKey()  #等待时间,毫秒级,0表示任意中止

cv2.imread() 的第二个参数主要包括以下三种写法:
cv2.IMREAD_COLOR : 默认使用该种标识。加载一张彩色图片,忽视它的透明度。
cv2.IMREAD_GRAYSCALE : 加载一张灰度图。
cv2.IMREAD_UNCHANGED : 加载图像,包括它的Alpha通道.。
也可以用1 ,0 ,-1代替表示。
在这里插入图片描述

1.2 获取摄像头图像数据

cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。如果是视频文件,直接指定好路径即可。
打开计算机的摄像头,将视频转换成灰度视频:

import cv2  # opencv的读取格式是BGR
#打开相机,电脑自带摄像头一般编号为0;外接摄像头编号为1,在设备管理器中可以查询
#也可将0改为视频名称,打开视频文件
vc = cv2.VideoCapture(0)

if vc.isOpened():
    open, frame = vc.read()
else:
    open = False

while open:
    ret, frame = vc.read()
    if frame is None:
        break
    if ret == True:
        #cvtColor函数包括了很多颜色格式之间的转换
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('result', gray)
        if cv2.waitKey(10) & 0XFF == 27:
            break
vc.release()
cv2.destroyAllWindows()

2、图像变化

读取到图像之后。就可以鬼图像进行相关操作,仿射变换是图像变化的基础操作,在深度学习中常被用作数据扩增的手段。

2.1 移动(translation)

首先定义移动矩阵 M,表示移动(left,right,up,down) 多少像素
矩阵M是浮点型的数组:
[1, 0, x]:x表示左右移动多少像素;x值为正——像右移动,x值为负——向左移动
[0, 1, y]:y表示上下移动多少像素;y值为正——向下移动,y值为负——向上移动

利用 cv2.warpAffine() 进行变换

import cv2
import numpy as np

img = cv2.imread('02.jpg',0)
#获得图像的尺寸
num_rows, num_cols = img.shape[:2]
#向右移动10,向下移动10
translation_matrix = np.float32([ [1,0,10], [0,1,10] ])
#cv2.warpAffine(输入图像, 变换矩阵,输出图像的大小)
img_translation = cv2.warpAffine(img, translation_matrix, (num_cols + 70, num_rows + 110))
cv2.imshow('Translation', img_translation)
cv2.waitKey()

在这里插入图片描述

2.2 旋转(rotation)

首先确定中心位置center,确定旋转的中心位置。
定义矩阵M:利用cv2.getRotationMatrix2D,其中的参数分别为旋转的固定点、旋转角度、1.0代表大小不变(旋转后的尺寸与原图的对比)
接下来继续利用cv2.warpAffine()进行变换,代码如下:

import cv2
#读取图像
img = cv2.imread('02.jpg',0)
#获得图像的尺寸
num_rows, num_cols = img.shape[:2]
#定义图像的旋转中心
center = num_cols/2, num_rows/2
#定义旋转矩阵(训传中心,旋转角度,大小变化)
rotation_matrix = cv2.getRotationMatrix2D(center, 30, 0.8)
#cv2.warpAffine(输入图像, 变换矩阵,输出图像的大小)
img_rotation = cv2.warpAffine(img, rotation_matrix, (num_cols, num_rows))
cv2.imshow('Rotation', img_rotation)
cv2.waitKey()

在这里插入图片描述

2.3 改变大小(resizing)

**cv2.resize()实现对图片进行缩放。**首先来看一下函数各参数意义

cv2.resize(src,dsize,
	        dst=None,
	        fx=None,
	        fy=None,
	        interpolation=None
)

src:原图,输入是array形式
dsize:输出图尺寸
fx:x轴缩放比例
fy:y轴缩放比例
interpolation:插值方式,默认为 flags=cv2.INTER_LINEAR,表示线性插值;cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA (区域插值) cv2.INTER_CUBIC(三次样条插值) cv2.INTER_LANCZOS4(Lanczos插值)

import cv2
image = cv2.imread('02.jpg',0)
#新的图像的宽度(width)150像素,利用比例关系确定高度(height)
r = 150.0 / image.shape[1]
dim = (150,int(image.shape[0]*r))

resized = cv2.resize(image,dim, interpolation = cv2.INTER_AREA)
cv2.imshow("Resized",resized)
cv2.waitKey()

在这里插入图片描述

2.4 翻转(flipping)

利用cv2.flip()函数可以实现。

import cv2
image = cv2.imread("02.jpg",0)

# 水平翻转
h_flip = cv2.flip(image, 1)
# 水平垂直翻转
hv_flip = cv2.flip(image, -1)
# 垂直翻转
v_flip = cv2.flip(image, 0)
# 保存图片
# cv2.imwrite("girl-hv.jpg", hv_flip)
# 显示图片
cv2.imshow("v_flip",v_flip)
cv2.waitKey()

在这里插入图片描述

2.5 剪裁(cropping)

裁剪的实现相对直接,图片裁剪使用img[y0:y1, x0:x1],其中参数分别代表y轴和x轴的起始坐标。

import cv2
image = cv2.imread("02.jpg",0)
# 裁剪坐标为[y0:y1, x0:x1]
cropped = image[50:160 ,60:180]
cv2.imshow("crop",cropped)
cv2.waitKey(0)

在这里插入图片描述

3、总结

本次主要介绍了数据的读取图像数据cv2.imread()、读取视频数据cv2.VideoCapture
图像的仿射变换代码:移动,旋转(cv2.warpAffine);改变大小(cv2.resize);翻转(cv2.flip);裁剪(image[50:160 ,60:180])。

下一篇博客将整理图像形态学变换和边缘检测的代码
最终的目的是实现一个基于OpenCV的车牌号识别的小项目。

参考

https://blog.csdn.net/weixin_42823848/article/details/86721765

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenCV是一个广泛使用的计算机视觉库,用于图像和视频处理。下面是一些OpenCV图像处理基础知识: 1. 图像加载和显示:使用OpenCV可以加载和显示图像。可以使用`cv2.imread()`函数加载图像,并使用`cv2.imshow()`函数显示图像。 2. 图像保存:使用`cv2.imwrite()`函数可以将图像保存到文件中。 3. 图像通道:彩色图像由三个颜色通道(红色、绿色和蓝色)组成,每个通道都是一个灰度图像。可以使用`cv2.split()`函数将彩色图像拆分成单个通道,并使用`cv2.merge()`函数将单个通道合并成彩色图像。 4. 图像缩放:可以使用`cv2.resize()`函数调整图像的大小。可以指定新的宽度和高度,或者指定缩放因子。 5. 图像旋转:可以使用`cv2.getRotationMatrix2D()`函数获得旋转矩阵,并使用`cv2.warpAffine()`函数对图像进行旋转。 6. 图像平滑:可以使用不同的滤波器对图像进行平滑处理,如均值滤波器、高斯滤波器等。可以使用`cv2.blur()`函数进行均值滤波,使用`cv2.GaussianBlur()`函数进行高斯滤波。 7. 图像边缘检测:可以使用不同的边缘检测算法,如Sobel算子、Canny边缘检测等。可以使用`cv2.Sobel()`函数进行Sobel算子边缘检测,使用`cv2.Canny()`函数进行Canny边缘检测。 8. 图像阈值处理:可以使用不同的阈值处理方法对图像进行二值化处理,如全局阈值、自适应阈值等。可以使用`cv2.threshold()`函数进行全局阈值处理,使用`cv2.adaptiveThreshold()`函数进行自适应阈值处理。 以上是OpenCV图像处理的一些基础知识,希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值