创建一个窗口#zeros(shape,dtype=float,order='C')
#shape:形状,dtype:数据类型,可选参数,默认numpy.float64img = np.zeros((500,500,3),np.uint8)
读取图片:
img=cv.imread('图片路径',flag);——彩色一般都是原图
flag=-1时,8位深度,原通道——原图
flag=0,8位深度,1通道——黑白
flag=1, 8位深度 ,3通道(彩色)
flag=2,原深度,1通道——黑白
flag=3, 原深度,3通道(彩色)
flag=4,8位深度 ,3通道(彩色)
获取音频文件:
cap = cv2.VideoCapture("2.avi")
新建窗口:cv.nameWindow();的方法
void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE) ;
参数1:新建的窗口的名称。自己随便取。
参数2:窗口的标识,一般默认为WINDOW_AUTOSIZE 。
WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改。(上面图1就是使用的它)
WINDOW_NORMAL 用户可以改变这个窗口大小(上面图2就是使用的它)
WINDOW_OPENGL 窗口创建的时候会支持OpenGL
滑动控件的创建:
cv2.createTrackbar('Weighted','Combine',50,100,OnAddWeighted)
参数一、trackbarname:滑动空间的名称;
参数二、winname:滑动空间用于依附的图像窗口的名称(一般是nameWindow的名称);
参数三、value:初始化阈值;
参数四、count:滑动控件的刻度范围;
参数五、TrackbarCallback是回调函数
举个与运算 例子(and):#相与,如果mask模板是255则为255,否者为原色。通俗理解:若模板为黑色,则该部分为黑,否则为参考图的颜色。
图片对比度转换:
gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#转为灰度图 0则正常
gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)#转到HSV空间
写入字体#设置字体类型:
FONT_HERSHEY_SIMPLEX,FONT_HERSHEY_PLAIN,FONT_HERSHEY_DUPLEX
font1 = cv2.FONT_HERSHEY_SIMPLEX
font2 = cv2.FONT_HERSHEY_PLAIN
font3 = cv2.FONT_HERSHEY_DUPLEX
#背景图片,待写入的字,第一个字符左下角坐标,字体类型,字体大小,字体颜色,字体粗细
cv2.putText(img,'OpenCV',(20,100),font1,2,(255,0,0),5)
直线
#背景图,起点左边,终点坐标,线条颜色,线条宽度,[线条类型]
##线条类型:默认是8-connected样式,anti-aliased线条,cv2.LINE_AA表示反锯齿线条,曲线视觉效果更佳
cv2.line(img,(0,0),(300,300),(0,255,0),3)
圆
#背景图,圆心位置,圆半径,圆颜色,[圆粗细,圆边界类型]
cv2.circle(img,(200,200),30,(0,0,255))
椭圆
#背景图,中心坐标,长短轴,顺时针旋转角度,顺时针起始角度,终止角度,线条颜色,线条粗细,[线条类型]
cv2.ellipse(img,(200,200),(170,130),0,0,360,(255,0,0),3)
矩形框
#背景图片,左上角,右下角,BGR,矩形框边框厚度,[边缘折线类型]
cv2.rectangle(img,(10,10),(200,200),(0,255,0),-1, cv2.LINE_AA)
绘制多边形
#将数组转化为矩阵
#数组,[数据类型]
pts = np.array([[50,50],[250,50],[250,250],[50,250]],np.int32)
多边形边框
#背景图片,顶点集合,是否是闭合折线,折线颜色,折线粗细,[折线类型]
cv2.polylines(img,[pts],True,(255,0,0),6,cv2.LINE_AA)
多边形内填充
#背景图片,顶点集合,填充颜色,[边缘折线类型]
cv2.fillPoly(img,[pts],(0,255,0),cv2.LINE_AA)
鼠标事件回调函数(鼠标响应函数)void 函数名(int event,int X,int Y,int flags,void* param)
#鼠标事件类型,X和Y为事件发生时鼠标坐标,按下鼠标的哪个键,指向任意对象的指针void screenShot(event,x,y,flags,param)
处理鼠标动作函数 void setMousecallback(winname,onMouse, [void* userdata=0])
#窗口名,鼠标响应函数,传给回调函数的参数cv2.setMousecallback("窗口名",鼠标相应函数名)
鼠标事件类型
EVENT_MOUSEMOVE 滑动EVENT_LBUTTONDOWN 左键点击
EVENT_RBUTTONDOWN 右键点击
EVENT_MBUTTONDOWN 中键点击
EVENT_LBUTTONUP 左键放开
EVENT_RBUTTONUP 右键放开
EVENT_MBUTTONUP 中键放开
EVENT_LBUTTONDBLCLK 左键双击
EVENT_RBUTTONDBLCLK 右键双击
EVENT_MBUTTONDBLCLK 中键双击
在图上画图形(或者截图):
# -*- coding: cp936 -*-
import cv2
import numpy as np
flag = False
x1=y1=0
##Alt+3
def screenShot(event,x,y,flags,param):
global x1,y1,flag,img,temp
if event==cv2.EVENT_LBUTTONDOWN: #鼠标左键按下
flag = True #表示当前鼠标左键是按下的
x1 = x
y1 = y
elif event==cv2.EVENT_MOUSEMOVE: #鼠标移动
#鼠标移动的时候一直运行下面这个,所以会保留最后一次画的圆
if(flag):
img = temp.copy()#调用temp中的图
#cv2.rectangle(img,(x1,y1),(x,y),(0,255,0),2)
cv2.circle(img,((x1+x)//2,(y1+y)//2),abs((x-x1)//2),(0,0,255),2)
'''
cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1,
int lineType=8, int shift=0)
img为源图像指针
center为画圆的圆心坐标
radius为圆的半径
color为设定圆的颜色,规则根据B(蓝)G(绿)R(红)
thickness 如果是正数,表示组成圆的线条的粗细程度。否则,-1表示圆是否被填充
line_type 线条的类型。默认是8
shift 圆心坐标点和半径值的小数点位数
'''
elif event==cv2.EVENT_LBUTTONUP: #鼠标左键弹起
flag = False #弹起使画圆结束
temp = img.copy()#画完的图保存到temp中
#ROI = temp[y1:y,x1:x] #---y1:y2, x1:x2
#cv2.imshow('ROI',ROI)
#cv2.imwrite('ROI.bmp',ROI)
img=cv2.imread('1.jpg') #读取图像
temp = img.copy() #备份img图
cv2.namedWindow('screenShot1')#生成的窗口名
#鼠标操作信息回调函数
cv2.setMouseCallback('screenShot1',screenShot)#将screenShot画圆函数回调到窗口中
while(1):
cv2.imshow('screenShot1',img)#将图片展现窗口
if cv2.waitKey(1)&0xFF==27: #Esc按下退出
break
cv2.destroyAllWindows()
实现雪花效果:
# -*- coding: cp936 -*-
import cv2
import numpy as np
import random #随机数模块
img=cv2.imread('1.jpg') #读取图像
#print img.shape
#实现雪花效果
for num in range(0,300): #控制雪花点个数
i = random.randint(0,img.shape[0])%img.shape[0]
j = random.randint(0,img.shape[1])%img.shape[1]
#img[i,j] = [0, 0, 255]
cv2.circle(img,(j,i),2,(255,255,255),-1)
cv2.imshow('src',img)
cv2.imwrite('snow.jpg',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
分解视频:
# -*- coding: utf-8 -*-
import cv2
cap = cv2.VideoCapture("2.avi")
flag = 0
if(cap.isOpened()): #视频打开成功
flag = 1
else:
flag = 0
#print "read error!"
i=0
imgPath = ""
if(flag==1):
while(True):
ret,frame = cap.read()#读取一帧
#if(frame is None):
if ret==False: #读取帧失败
break
#gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#转为灰度图 0则正常
#gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)#转到HSV空间
i=i+1
imgPath = "D:\\pic\\"+str(i)+".bmp"
cv2.imshow("frame", frame)
#cv2.imwrite(imgPath,frame)#截取的帧写入路径文件
if cv2.waitKey(50)&0xFF ==27: #按下Esc键退出
#cv2.imwrite("1.bmp",frame)
break
cap.release()
cv2.destroyAllWindows()
自定义颜色条:
# -*- coding: cp936 -*-
import cv2
import numpy as np
def nothing(x):
pass
img=np.zeros((300,512,3),np.uint8)
cv2.namedWindow('image')
cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)
switch='0:OFF\n1:ON'
cv2.createTrackbar(switch,'image',0,1,nothing)
while(1):
cv2.imshow('image',img)
k=cv2.waitKey(1)&0xFF
if k==27:
break
r=cv2.getTrackbarPos('R','image')
g=cv2.getTrackbarPos('G','image')
b=cv2.getTrackbarPos('B','image')
s=cv2.getTrackbarPos(switch,'image')
if s==0:
img[:]=0
else:
img[:]=[b,g,r]#OpenCV存储颜色顺序是BGR
cv2.destroyAllWindows()
图片重叠度:
# -*- coding: cp936 -*-
import cv2
import numpy as np
def OnAddWeighted(weightValue):#图像混合
global img,img2,dst #全局变量
dst = cv2.addWeighted(img1,float(weightValue)/100,img2,float(100-weightValue)/100,0)#按权重混合叠加
img1 = cv2.imread('1.jpg') #加载第一张图片
img2 = cv2.imread('2.jpg') #加载第二张图片
dst = np.zeros(img1.shape,np.uint8) #结果图像定义
cv2.namedWindow('Combine')
cv2.createTrackbar('Weighted','Combine',50,100,OnAddWeighted)
OnAddWeighted(50) #初始调用
while(1):
cv2.imshow('Combine',dst)#显示结果图
k=cv2.waitKey(1)&0xFF
if k==27:
break
cv2.destroyAllWindows()
实现图片重叠(涉及图片【bitwise】按位计算):
# -*- coding: cp936 -*-
import numpy as np
import cv2
#获取car图并且放在src幕布上
img = cv2.imread('1 (1).jpg')
cv2.imshow('src',img)
#获取logo图并且放在src幕布上
logo1 = cv2.imread('3.png')
logo = cv2.resize(logo1,(200,200))#--将图片改为200x200大小
cv2.imshow('logo',logo)
w = logo.shape[1] #--logo宽度
h = logo.shape[0] #--logo高度
gray = cv2.cvtColor(logo,cv2.COLOR_BGR2GRAY)#logo转为灰度图
cv2.imshow('gray',gray) #显示灰度图
ret, mask1 = cv2.threshold(gray, 175, 255, cv2.THRESH_BINARY_INV)#将gray二值化,转成黑白图
cv2.imshow('mask', mask1)
#相与,如果mask模板是255则为255,否者为原色。
logo_temp = cv2.bitwise_and(logo, logo, mask=mask1) #将logo和mask 相与
cv2.imshow('logo_temp',logo_temp)
roi = img[0:h,0:w] #---y1:y2,x1:x2
mask1_inv = cv2.bitwise_not(mask1)#翻转,白变黑,黑变白
cv2.imshow('mask2',mask1_inv)
roi_temp = cv2.bitwise_and(roi, roi, mask=mask1_inv)#将mask2和原图roi区间 相与
cv2.imshow('roi_temp',roi_temp)
dst = cv2.add(logo_temp, roi_temp)#
cv2.imshow('result',dst)
print(dst)
img[0:h,0:w] = dst
cv2.imshow('result',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
手机扫一扫
移动阅读更方便
你可能感兴趣的文章