1、图片加载、显示和保存
import cv2 cv2.imread(filename, flags) #读取加载图片 cv2.imshow(winname, mat) #显示图片 cv2.waitKey() #等待图片的关闭 cv2.imwrite(filename, img) #保存图片
2、图像显示窗口创建与销毁
cv2.namedWindow(winname, 属性) #创建一个窗口 cv2.destroyWindow(winname) #销毁某个窗口 cv2.destroyAllWindows() #销毁所有窗口
3、图片的常用属性的获取
img.shape #打印图片的高、宽和通道数 img.size #打印图片的像素数目 img.dtype #打印图片的格式
4、选取感兴趣的矩形区域(ROI)
一张图片它的某个像素点可以用 img[x, y, c]表示(x,y为坐标,c为通道数) 这个图片的某个矩形区域可以表示为img[x1:x2, y1:y2, c](矩形左上角坐标为(x1, y1),右下角坐标为(x2, y2)) 其中 c取值0,1,2分别对相应B,G,R颜色通道,img[x, y]默认代表所有通道
5、图片颜色通道的分离与合并
cv2.split(img) #将图片img分离为三个颜色通道 cv2.merge(img) #将三个颜色通道合并为一张图片
6、图片两种加法
cv2.add(src1, src2):普通相加 cv2.addWeighted(src1, alpha, src2, beta,gamma,dst):带权相加 src1:第一张图片 alpha:第一张图片权重 src2:第二张图片 beta:第二张图片权重 gamma:图1与图2带权相加和后添加的数值(总和大于255为纯白) dst:输出图片
7、加&减&乘&除
def add_demo(m1, m2): dst = cv2.add(m1, m2) #加 cv2.imshow("add", dst) def subtract_demo(m1, m2): dst = cv2.subtract(m1, m2) #减 cv2.imshow("subtract", dst) def multiply_demo(m1, m2): dst = cv2.multiply(m1, m2) #乘 cv2.imshow("multiply", dst) def divide_demo(m1, m2): dst = cv2.divide(m1, m2) #除 cv2.imshow("divide", dst)
8、均值&方差
def demo(img): M1 = cv2.mean(img)# 均值 print(M1) M1, dev1 = cv2.meanStdDev(img) # 均值和方差 print(M1) print(dev1)
9、与、或、非、异或
def logic_demo(m1, m2): dst = cv2.bitwise_and(m1, m2) #与 cv2.imshow("bitwise_and", dst) dst = cv2.bitwise_or(m1, m2) #或 cv2.imshow("bitwise_or", dst) dst = cv2.bitwise_not(m1, m2) #非(颜色翻转) cv2.imshow("bitwise_not", dst) dst = cv2.bitwise_xor(m1, m2) #异或 cv2.imshow("bitwise_xor", dst)
10、计算执行时间
cv2.getTickCount() :用于返回从操作系统启动到当前所经的计时周期数;
cv2.getTickFrequency():用于返回CPU的频率,也就是一秒内重复的次数。
时间(s) = 总次数 / 一秒内重复的次数 时间(ms) = 1000 *总次数 / 一秒内重复的次数
t1 = cv2.getTickCount() function() # 待测试的函数 t2 = cv2.getTickCount() time = (t2 - t1) / cv2.getTickFrequency() print("time : %s ms" % (time * 1000))
11、彩色空间转换
cv2.cvtColor(src,code,dst=None,dstCn=None)
参数:code,转换类型
# 色彩空间转换 def color_space_demo(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#BGR转换到GRAY cv2.imshow("gray", gray) hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)#BGR转换到HSV cv2.imshow("hsv", hsv) yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)#BGR转换到YUV cv2.imshow("yuv", yuv) ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)#BGR转换到CrCb cv2.imshow("ycrcb", ycrcb)
12、常见滤波器
12.1 均值滤波
cv2.blur(src,ksize,dst=None,anchor=None,borderType=None)
作用:对图像进行算术平均值模糊
参数:ksize,卷积核的大小。dst,若填入dst,则将图像写入到dst矩阵
pic_center
12.2 中值滤波
cv2.medianBlur(src,ksize,dst=None)
作用:对图像进行中值模糊
12.3 高斯滤波
cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
作用:对图像进行高斯模糊
参数:sigmaX,X方向上的方差,一般设为0
12.4 双边滤波
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None))
作用:对图像进行双边模糊
参数:
int d: 表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会从第五个参数sigmaSpace计算该值。
double sigmaColor: 颜色空间过滤器的sigma值,这个参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
double sigmaSpace: 坐标空间中滤波器的sigma值,如果该值较大,则意味着越远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当d>0时,d指定了邻域大小且与sigmaSpace无关,否则d正比于sigmaSpace.
12.5 方块滤波
cv2.boxFilter(原始图像, 目标图像深度, 核大小, normalize)
img = cv.imread('1.jpg',1) blur = cv.blur(img,(5,5)) #均值滤波 median = cv.medianBlur(img,5) #中值模糊 Gauss = cv.GaussianBlur(img,(5,5),0) #高斯模糊 bilater = cv.bilateralFilter(img,9,75,75) #双边模糊