关于openCV相关知识复盘

 

目录

一、openCV介绍:

                1、内容

                2、安装

                3、测试

二、应用openCV:

                1、滑动条创建:

                2、鼠标控制事件:

                 3、视频切帧:

                4、绘制图像:

                5、鼠标绘图:


一、openCV介绍:

1、内容:

OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉机器学习软件库,可以运行在LinuxWindowsAndroidMac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

        OpenCV用C++语言编写,它具有C ++,PythonJavaMATLAB接口,并支持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)

运行结果:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值