关于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()

关于openCV相关知识复盘

关于openCV相关知识复盘

其中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()

运行结果:

关于openCV相关知识复盘

相关解释:

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)

运行结果:

关于openCV相关知识复盘

Original: https://blog.csdn.net/beautiful1boy/article/details/127319482
Author: beautiful1boy
Title: 关于openCV相关知识复盘

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/701504/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球