图象的运算主要有加减,位运算等。对于图象的加减来说注意图象的大小和数据类型一样。
图象混合主要是addWeighted函数,形式为cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])
scr1是第一个图片,alpha是透明度;src2是第二个图片,beta是透明度。两个通名都加起来是1.后面的gamma有点玄学默认为0就好
import cv2 import numpy as np import matplotlib.pyplot as plt #img=cv2.imread('C:/Users/dell/Desktop/cos.jpg') img1=cv2.imread('C:/Users/dell/Desktop/c1.jpg') img2=cv2.imread('C:/Users/dell/Desktop/c2.jpg') dst=cv2.addWeighted(img1,0.1,img2,0.9,0) cv2.imshow('image',dst) cv2.waitKey(0) cv2.destroyAllWindows()
图象的按位运算函数与CV2.bitwise_and和运算,CV2.bitewise_or或运算,CV2.bitewise_not非运算,CV2.bitewise_xor异或运算
就以和运算为例cv2.bitwise_and(src1, src2, dst=None, mask = None)。src1和src2是图象,可以一样;dst是返回的数据,通常可以省略;mask是要选定的区域(不处理这些,而处理其他的),没有的话可以忽略。函数实际上就是对图象的二进制数据进行与或非操作。具体的应用结合了下一小节一起展示了出来
opencv的图像颜色转换主要有两种:要么是BGR转化Gray,或者BGR转化HSV(色相,饱和度,明度)
其函数调用格式为CV2.cvtColor(img,flags)。
在一些简单的目标追中上可以直接利用物体的颜色来实现,虽然这样实时性比价好,但是精度还是比较低的。
(至于为什么精度低,原理可以参考机器学习的PCA理论)
下面的代码实现了利用电脑摄像头捕捉蓝色的物体
import cv2 import numpy as np import matplotlib.pyplot as plt #img=cv2.imread('C:/Users/dell/Desktop/cos.jpg') cap=cv2.VideoCapture(0) while(1): rect,frame=cap.read() hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) #设定蓝色阈值 lower_blue=np.array([110,50,50]) 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()