目录
1、内容
2、安装
3、测试
1、滑动条创建:
2、鼠标控制事件:
3、视频切帧:
4、绘制图像:
5、鼠标绘图:
一、openCV介绍:
1、内容:
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。
2、安装:
pip install opencv-python==3.4.2.17
3、测试:
import cv2
lena=cv2.imread("1.jpg")
cv2.imshow("image",lena)
cv2.waitKey(0)
二、应用openCV:
1、滑动条创建:
创建一个简单的应用程序,显示您指定的颜色。有一个显示颜色的窗口和三个轨道栏,用于指定B,G,R各颜色。可以滑动轨迹栏并相应地窗口颜色更改。默认情况下,初始颜色将设置为黑色。
代码:
import cv2
import numpy as np
cv2.namedWindow('trackbar',cv2.WINDOW_NORMAL)
def onMouse(event,x,y,flags,userdata):
pass
cv2.createTrackbar('A','trackbar',0,1,onMouse)
cv2.createTrackbar('R','trackbar',0,255,onMouse)
cv2.createTrackbar('G','trackbar',0,255,onMouse)
cv2.createTrackbar('B','trackbar',0,255,onMouse)
img=np.zeros((480,640,3),np.uint8)
while True:
a=cv2.getTrackbarPos('A','trackbar')
if a==1:
r=cv2.getTrackbarPos('R','trackbar')
g=cv2.getTrackbarPos('G','trackbar')
b=cv2.getTrackbarPos('B','trackbar')
img[:]=[b,g,r]
cv2.imshow('trackbar',img)
key=cv2.waitKey(1)
if key&0xFF==ord('q'):
break
cv2.destroyAllWindows()
运行结果:
其中A滑动条为锁定条,A为1时才可改变颜色。
2、鼠标控制事件:
鼠标移动、点击指令相关操作控制
代码:
import cv2 as cv
import numpy as np
def mouse_callback(event,x,y,flags,userdata):
print(event,x,y,flags,userdata)
# 按下鼠标右键推出
if event == 2: # 数字2上面文字有解释
cv.destroyALLWindows()
cv.namedWindow('mouse',cv.WINDOW_NORMAL) # 设置个窗口
# 宽度和高度
cv.resizeWindow('mouse',640,360) # 设置下窗口大小
# 设置鼠标回调函数
# '123'为userdata数据
cv.setMouseCallback('mouse',mouse_callback,'123')
# 显示窗口和背景
# 生成全黑图片
# 高度和宽度
img = np.zeros((360,640,3),np.uint8)
while True:
cv.imshow('mouse',img)
cv.waitKey(1) & 0xff == ord('q')
cv.destroyALLWindows()
运行结果:
相关解释:
event:
EVENT_MOUSEMOVE 0 鼠标移动
EVENT_LBUTTONDOWN 1 按下鼠标左键
EVENT_RBUTTONDOWN 2 按下鼠标右键
EVENT_MBUTTONDOWN 3 按下鼠标中键
EVENT_LBUTTONUP 4 左键释放
EVENT_RBUTTONUP 5 右键释放
EVENT_MBUTTONUP 6 中键释放
EVENT_LBUTTONDBLCLK 7 左键双击
EVENT_RBUTTONDBLCLK 8 右键双击
EVENT_MBUTTONDBLCLK 9 中键双击
EVENT_MOUSEWHEEL 10 鼠标滚轮上下滚动
EVENT_MOUSEHWHEEL 11 鼠标左右滚动
flags:
EVENT_FLAG_LBUTTON 1 按下左键
EVENT_FLAG_RBUTTON 2 按下右键
EVENT_FLAG_MBUTTON 4 按下中键
EVENT_FLAG_CRTLKEY 8 按下ctrl键
ECENT_FLAG_SHIFTKEY 16 按下shift键
EVENT_FLAG_ALTKEY 32 按下alt键
3、视频切帧:
将一段视频按照一定频率截取片段图片
import cv2
frameWidth=640
frameHeight=480
cap=cv2.VideoCapture(0,cv2.CAP_DSHOW)
i=1
while True:
success,img=cap.read()
img=cv2.resize(img,(frameWidth,frameHeight))
if i%5==0:
cv2.imwrite("./picture/"+str(i)+".png",img)
i+=1
cv2.imshow("Result",img)
if cv2.waitKey(1)&0xFF==ord('q'):
break
4、绘制图像:
import cv2
import numpy as np
# cv2.namedWindow('shape',cv2.WINDOW_NORMAL)
# img=np.zeros((511,511,3),np.uint8)
# cv2.line(img,(0,0),(511,511),(0,0,255),5)
# cv2.imshow('shape',img)
# cv2.waitKey()
#------------------圆形---------------
# cv2.circle(img,(200,200),50,(654,48,665),5)
# cv2.imshow('shape',img)
# cv2.waitKey()
#-------------矩形------------------
# cv2.rectangle(img,(50,50),(400,400),(0,0,255),7)
# cv2.imshow('shape',img)
# cv2.waitKey()
#------------椭圆-----------------------
# cv2.ellipse(img,(256,256),(100,50),0,0,360,(0,0,255),3)
# cv2.imshow('shape',img)
# cv2.waitKey()
#----------------多边形---------------
# pts=np.array([[150,45],[130,30],[100,60],[145,78]],np.int32)
# cv2.polylines(img,[pts],True,(0,0,250),5)
# cv2.imshow('shape',img)
# cv2.waitKey()
#--------------绘制文本---------------
# cv2.putText(img,"YYDS",(100,200),cv2.FONT_HERSHEY_PLAIN,10,(0,0,255))
# cv2.imshow('shape',img)
# cv2.waitKey()
5、鼠标绘图:
使用鼠标调回函数和绘图实现鼠标绘图
import cv2
import numpy as np
a=(0,0)
b=(0,0)
cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)
img=np.ones((480,640),np.uint8)*255
def onMouse(event,x,y,flags,userdata):
if flags==0:
global a
a=(x,y)
elif flags==1:
b=(x,y)
cv2.circle(img,b,1,(14,128,255),1)
# cv2.line(img, a, b, (100, 200, 200), 5)
cv2.setMouseCallback('mouse',onMouse,'123')
while True:
cv2.imshow('mouse',img)
key=cv2.waitKey(1)
if key&0xFF==ord('q'):
break
cv2.destroyAllWindows()
cv2.namedWindow('shape',cv2.WINDOW_NORMAL)
运行结果: