版权声明:转载请说明来源,谢谢 https://blog.csdn.net/wsp_1138886114/article/details/82763990
一、图片 读、写、显示、属性查看
import numpy as np
import cv2
-----------------------------直接读取--------------------------------
img = cv2.imread('cat.jpg',0) #读取图像(直接读取)
cv2.imshow('image',img) #显示图像
k = cv2.waitKey(0)
if k == 27: # 按 Esc 退出(关闭显示窗口)
cv2.destroyAllWindows()
elif k == ord('s'): # 按 's' 保存并退出 (关闭显示窗口)
cv2.imwrite('cat01.png',img)
cv2.destroyAllWindows()
-----------------------------以灰度图的形式读取--------------------------------
grayImage = cv2.imread('cat.png', cv2.IMREAD_GRAYSCALE )
"""
也可选参数:
cv2.IMREAD_COLOR (BGR,忽略alpha通道),
cv2.IMREAD_GRAYSCALE (grayscale:读入灰度图片),
cv2.IMREAD_UNCHANGED (完整图片,包括alpha通道)
"""
cv2.imwrite('cat02.png', grayImage)
-----------------------------图片的属性--------------------------------
print ("图片形状:",img.shape)(长、宽、通道数)
print ("图片大小:",img.size)
print ("图片类型:",img.dtype)
"""
输出:
图片形状: (366, 445, 3)
图片大小: 488610
图片类型: uint8
"""
二、图像增强(缩放、平移、旋转)
import cv2
import numpy as np
-----------------------------图像缩放--------------------------------
"""
cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)
scr: 原图
dsize:输出图像尺寸
fx: 沿水平轴的比例因子
fy: 沿垂直轴的比例因子
interpolation:插值方法(见附录)
"""
# 方法1:直接设定缩放因子
img = cv2.imread('005.jpg')
res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)
print(img.shape) #输出为(366,445,3)【宽:x轴,高:y轴,通道数】
print(img.shape[:2]) #输出为(366,445)
cv2.imshow('', res1)
cv2.waitKey(0)
cv2.destroyAllWindows()
#方法2:获取原图像的水平方向尺寸和垂直方向尺寸。再缩放
height, width = img.shape[:2]
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)
-----------------------------图像平移--------------------------------
img = cv2.imread('005.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()
-----------------------------图像旋转--------------------------------
img = cv2.imread('005.jpg',0)
rows,cols = img.shape
M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
dst = cv2.warpAffine(img,M,(cols,rows))
三、仿射变换(图像位置校正)
import cv2
import numpy as np
img = cv2.imread('006.jpg')
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))
cv2.imshow('image',dst)
cv2.waitKey(0)
四、颜色变换
"""
cv2.cvtColor(input_image, flag)函数实现图片颜色空间的转换:
flag 参数决定变换类型。如 BGR->Gray
flag 就可以设置为 cv2.COLOR_BGR2GRAY 。
"""
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
_, frame = cap.read() # 读取视频的每一帧
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 将图片颜色空间从 BGR -> HSV 空间
lower_blue = np.array([110,50,50]) # 定义在HSV空间中蓝色的范围
upper_blue = np.array([130,255,255])
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()
五、通道的拆分/合并处理/添加边距
import cv2
img = cv2.imread('img/image.png')
b,g,r = cv2.split(img)
img = cv2.merge((b,g,r))
-----------------------------添加边距--------------------------------
"""cv2.copyMakeBorder函数"""
import cv2
import numpy as np
BLUE = [255,0,0]
img1 = cv2.imread('opencv_logo.png')
replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)
constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)
附录:
interpolation 所用的插值方法
INTER_NEAREST 最近邻插值
INTER_LINEAR 双线性插值(默认设置)
INTER_AREA 使用像素区域关系进行重采样。
它可能是图像抽取的首选方法,因为它会产生无云纹理的结果。
但是当图像缩放时,它类似于INTER_NEAREST方法。
INTER_CUBIC 4x4像素邻域的双三次插值
INTER_LANCZOS4 8x8像素邻域的Lanczos插值