一,图像的基础操作
1,获取并修改像素值
获取(速度比较慢)
px=img[100,100]
print pxblue=img[100,100,0]print blue修改
img[100,100]=[255,255,255]
print img[100,100]另一种更好的方法(使用numpy)速度会更快
print img.item(10,10,2)
img.itemset((10,10,2),100)print img.item(10,10,2)2,获取图像的属性
img.shape 行列通道
img.size 像素数目
img.dtype 数据类型
注释:常用编码 # -*- coding: utf-8 -*-
3,图像ROI
ball=img[280:340,330:390]
img[273:333,100:160]=ball4,拆分以及合并图像通道
b,g,r=cv2.split(img)
img=cv2.merge(b,g,r)或者
bgr
b=img[:,:,0] 蓝色通道
img[:,:,2]=0 红色通道置0
5,图像填充
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)plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')plt.show()参数:img1输入图像 10,10,10,10是对应边界像素数目,边界类型(有颜色常数,镜像...)
二,图像上的算数运算
1,图像加法
x = np.uint8([250])
y = np.uint8([10])print cv2.add(x,y) # 250+10 = 260 => 255[[255]]print x+y # 250+10 = 260 % 256 = 4[4]OpenCV 中的加法与 Numpy 的加法是有所不同的。OpenCV 的加法
是一种饱和操作,而 Numpy 的加法是一种模操作。2.图像混合
import cv2
import numpy as npimg1=cv2.imread('ml.png')img2=cv2.imread('opencv_logo.jpg')dst=cv2.addWeighted(img1,0.7,img2,0.3,0)cv2.imshow('dst',dst)cv2.waitKey(0)cv2.destroyAllWindow()3,按位运算
AND,OR,NOT,XOR
三,程序优化
1,检测程序效率
import cv2
import numpy as npe1 = cv2.getTickCount()# your code executione2 = cv2.getTickCount()time = (e2 - e1)/ cv2.getTickFrequency()2,优化
使用函数 cv2.useOptimized()
来查看优化是否被开启了,使用函数 cv2.setUseOptimized() 来开启优化