目录
1.图像基本操作
1.1 读取,显示,保存
1.2 像素操作
1.3 查看图像性质
1.4 图像区域
1.5 图像通道
1.6 图像边框
* 小结
2.图像算法运算
2.1 图像加法
2.2 图像融合
2.3 性能衡量
import numpy as np import cv2 as cv # 读取图片 # cv.imread('图片完整名',标志) # 标志: # 1:cv.IMREAD_COLOR 加载彩色图形(默认),忽视透明度。 # 0:cv.IMREAD_GRAYSCALE:以灰度模式加载图像。 # -1:cv.IMREAD_UNCHANGED:加载图像,包括alpha通道。 img=cv.imread('1.jpg',1) # 显示图像 # cv.imshow('窗口名',图片对象) cv.imshow('1',img) # 保存图像 # cv.imwrite('文件名',对象名) cv.imwrite('copy1.jpg',img) cv.waitKey(0) # 等待键盘命令
## 访问像素值 # 方法一:通用于选择数组的区域 # 对象名[行,列] print("RGB:",img[99,99]) print("R:", img[99, 99, -1]) print("G:", img[99, 99, 1]) print("B:", img[99, 99, 0]) # 修改像素值 img[99,99]=[255,255,255] print(img[99,99]) # 方法二:适用于单个像素访问 # 对象名.item(x,y,channel) img.item(99,99,2) # 修改像素值 # img.itemset((x,y,channl),新像素值) img.itemset((99,99,2),0) print(img[99,99])
## 查看图像形状 # 对象.shape print("shape:",img.shape) ## 查看像素总数 # 对象.size print("size:",img.size) ## 查看图像数据类型 # 对象.dtype print("dtype:",img.dtype)
## 指定图像区域 ball=img[100:150,100:150] cv.imshow("ball",ball)
## 拆分图像通道 b,g,r=cv.split(img) # 耗时 print("b,g,r:",b,g,r) ## 合并图像通道 img=cv.merge((b,g,r)) ## 将所有重复像素设为0 # 0,1,2分别是b,g,r的通道 img[:,:,2]=0
## 设置图像边框 # cv.copyMakeBorder(src,边界宽度,边框类型) # src - 输入图像 # top,bottom,left,right 边界宽度(以相应方向上的像素数为单位) # borderType - 定义要添加哪种边框的标志。它可以是以下类型: # cv.BORDER_CONSTANT - 添加恒定的彩色边框。该值应作为下一个参数给出。 # cv.BORDER_REFLECT - 边框将是边框元素的镜像。 # value -边框的颜色。 constant= cv.copyMakeBorder(img,10,10,10,10,cv.BORDER_CONSTANT,value=[0,0,0])
import numpy as np import cv2 as cv img=cv.imread('copy1.jpg') ## 访问像素值 # 方法一:通用于选择数组的区域 # 对象名[行,列] print("RGB:",img[99,99]) print("R:", img[99, 99, -1]) print("G:", img[99, 99, 1]) print("B:", img[99, 99, 0]) # 修改像素值 img[99,99]=[255,255,255] print(img[99,99]) # 方法二:适用于单个像素访问 # 对象名.item(x,y,channel) img.item(99,99,2) # 修改像素值 # img.itemset((x,y,channl),新像素值) img.itemset((99,99,2),0) print(img[99,99]) ## 查看图像形状 # 对象.shape print("shape:",img.shape) ## 查看像素总数 # 对象.size print("size:",img.size) ## 查看图像数据类型 # 对象.dtype print("dtype:",img.dtype) ## 指定图像区域 ball=img[100:150,100:150] cv.imshow("ball",ball) ## 拆分图像通道 b,g,r=cv.split(img) # 耗时 print("b,g,r:",b,g,r) ## 合并图像通道 img=cv.merge((b,g,r)) ## 将所有重复像素设为0 # 0,1,2分别是b,g,r的通道 img[:,:,2]=0 ## 设置图像边框 # cv.copyMakeBorder(src,边界宽度,边框类型) # src - 输入图像 # top,bottom,left,right 边界宽度(以相应方向上的像素数为单位) # borderType - 定义要添加哪种边框的标志。它可以是以下类型: # cv.BORDER_CONSTANT - 添加恒定的彩色边框。该值应作为下一个参数给出。 # cv.BORDER_REFLECT - 边框将是边框元素的镜像。 # value -边框的颜色。 constant= cv.copyMakeBorder(img,10,10,10,10,cv.BORDER_CONSTANT,value=[0,0,0]) cv.imshow("constant",constant) cv.waitKey(0)
res=img1+img2
=> cv.add(img1,img2)
两个图像应应有相同深度和类型,或第二个图像是标量。
import numpy as np import cv2 as cv x=np.uint8([250]) y=np.uint8([10]) # 250+10= 260=>255 print(cv.add(x,y)) # [[255]] # 250+10= 260%256 =4 print(x+y) # [4]
权重不同的图像加法。
G(x)=(1−α)f_0(x)+αf_1(x)
α:融合权重。
函数:
cv.addWeighted(scr1, scr1的融合比重alpha, scr2, scr2的融合比重beta, 加权后图像偏移量gamma )
函数计算公式:
dst(I)=saturate(src1(I)∗alpha+src2(I)∗beta+gamma)
import numpy as np import cv2 as cv img1=cv.imread("./image/cow.jpg") img2=cv.imread("./image/flower.jpg") dst=cv.addWeighted(img1,0.8,img2,0.2,0) cv.imshow('dst',dst) cv.waitKey(0)
测量代码执行时间。
e1 = cv.getTickCount() # 你的执行代码 e2 = cv.getTickCount() time = (e2 - e1)/ cv.getTickFrequency()