OpenCV和图像处理(一)

本文以下OpenCV都简写成"cv2"的形式,所有img都默认为一张图片
关联文章:
OpenCV和图像处理(二)

OpenCV和图像处理(三)

OpenCV和图像处理(四)

OpenCV和图像处理(五)

OpenCV和图像处理(六)

一、基本操作:
1、OpenCV读取和保存图像
img = cv2.imread('xx.jpg', flags='用什么模式读取图片[彩色or灰度]')
#读取图片并显示
cv2.imshow('show', img)
cv2.waitKey(0)
#保存图片
cv2.imwrite(path:str, img)
2、了解BGR和HSV颜色空间

RGB在cv2中顺序其实是BGR,但是其颜色过渡(指从红到绿到蓝)是离散的,为了便于连续操作,就可以使用HSV颜色空间。

色调H[0-179]:逆时针顺序 => 红-绿-蓝。

饱和度S[0-255]:饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。中心饱和度0,是白色;边缘饱和度达到最高。

明度V:[0-255]:V是竖着圆柱体的方向,表示颜色明亮的程度 。表面最明亮,越往下颜色越深,底下是黑色。

3、图像灰度和二值化

灰度是指没有通道,0-255是黑色的"深浅";二值化是指通过一个阈值将像素值分为两个值,比如0和255。虽然普通图像也能做二值化,但是一般都是灰度图再去做二值化。二值化有两种操作:

普通阈值二值化

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#转成灰度图像
ret, img2 = cv2.threshold(img_gray, thresh, maxval, type, dst=None)#转成二值化
r'''
解释一下cv2.threshold。img_gray是传入图像,thresh就是阈值,maxval是最大值,dst默认None。
返回第一个参数ret=thresh;第二个是二值化后的图片。
特别地:type可以有很多选项,之间可以+、&[and]、|[or]等操作:
------------------------------------------------------------------------
cv2.THRESH_BINARY       	if v > thresh : v = maxval else v = 0 
cv2.THRESH_BINARY_INV    	THRESH_BINARY的反转
cv2.THRESH_TRUNC        	if v > thresh : v = maxval else v 不变 
cv2.THRESH_TOZERO       	if v > thresh : v不变 else v = 0 
cv2.THRESH_TOZERO_INV  		THRESH_TOZERO的反转
------------------------------------------------------------------------
'''

一般来说,第一种操作了解type就可以了,因为更多时候用的是第二种操作:

自适应阈值二值化

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#转成灰度图像
adaptImg = cv2.adaptiveThreshold(img_gray, maxValue, adaptiveMethod, thresholdType, 			   blockSize, C, dst=None)#用自适应阈值二值化
r'''
普通二值化是对全图操作,而自适应阈值类似"卷积核操作",这种方法效果更好,相当于各区域动态自适应调整自己的阈值,而不是整个图像用同一个阈值。参数img_gray是传入图像,maxValue是像素值上限,
adaptiveMethod:自适应方法
	cv2.ADAPTIVE_THRESH_MEAN_C :领域内均值 
	cv2.ADAPTIVE_THRESH_GAUSSIAN_C :领域内像素点加权和,权重为一个高斯窗口
thresholdType:只有两个:cv2.THRESH_BINARY 和cv2.THRESH_BINARY_INV
blockSize: 规定正方形领域的大小,可以看做卷积核大小
C:常数C,阈值等于指定正方形领域的均值或加权和减去这个常数
'''
4、图像几何变换
4-1:仿射变换

仿射变换(Affine Transformation):简单说就是线性变换,基于仿射矩阵的变换。常见的操作如图像的缩放、平移、旋转、倾斜、镜像等。可以理解成空间的坐标系的变换导致了图像矩阵的变换。
在这里插入图片描述
常用的操作如下:何为仿射变换(Affine Transformation)

缩放图 = cv2.resize(img, (W’,H’), interpolation=cv2.INTER_CUBIC)
r'''
W'和H'是原图的W,H变换后值,interpolation有以下选项:   
cv2.INTER_CUBIC   # 立方插值[常用]
cv2.INTER_LINEAR   # 双线形插值 
cv2.INTER_NN       # 最近邻插值
cv2.INTER_AREA   # 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。
				   当图像放大时,类似于 CV_INTER_NN 方法 
'''
翻转图 = cv2.transpose(img)	#效果相当于给图像转置了 

镜像图 = cv2.flip(img, flipCode=0)
r'''
关于flipCode,有三个区间:
    0  垂直方向翻转
    1  水平方向翻转
    -1 水平、垂直方向同时翻转
'''

对于(4-1)来说,上面操作还很不够,更一般的情况是构造一个矩阵M,即式中3x3的矩阵,然后调用warpAffine方法进行具体变换:

h, w, c = src.shape
M1 = np.float32([[1, 0, 50], [0, 1, 50]])
M2 = np.float32([[0.5, 0, 0], [0, 0.5, 0]])
M3 = np.float32([[-1, 0, w], [0, 1, 0
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值