openCV 自学笔记

opencv官方文件

一:Mac下命令方式搭建opencv开发环境

        1.安装homebrew 在终端输入homebrew下的命令

        2.根据提示配置环境

3.通过以下两个命令安装配置环境

        brew install python@3.9

        pip3 install numpy matplotlib opencv_python

配置完成后可顺利导入相应包即可

opencv开发工具:pyсharm vscode

利用开发工具尝试的第一个小例子:通过CV2打开一张图片,现实时长用waitKey

        如果小写会出现以下错误提示:AttributeError: module 'cv2' has no attribute 'waitkey' 

Mac系统下可以直接 mkdir&&cd&&code.

然后进入代码编写即可

二:车辆检测

        1.窗口的展示

1.1:创建和显示窗口

namedWindow()

imshow()

destoryAllWindows()

resizeWindows 具体参数可以下载master opencv 进行查看

import cv2

cv2.namedWindow('new',cv2.WINDOW_NORMAL) #创建窗口
cv2.resizeWindow('new',1920,1080)#resize窗口的大小

cv2.imshow('new',0) #展示窗口

key=cv2.waitKey(0)#设置展示窗口的时长 单位毫秒
if (key == 'q'):#接受键盘信息 如果输入q 结束窗口展示
    exit()

cv2.destroyAllWindows() #释放掉所有窗口资源

设置鼠标回调函数

setMouseCallback(winname,callback,userdate) 窗口名字 回调函数 参数

callback (event,x, y, flags, userdate) 事件(左键 右键) 坐标位置 

opencv控制鼠标:

import cv2
import numpy as np
from cv2 import resizeWindow

#设置函数
def mouse_callback(event,x,y,flags,userdata):
    print(event,x,y,flags,userdata)

#mouse_callback(1,100,100,16,"666")

#创建窗口
cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)
cv2,resizeWindow('mouse',640,360)

#设置鼠标回调
cv2.setMouseCallback('mouse',mouse_callback,"123")

#显示窗口和背景
img =np.zeros((360,640,3),np.uint8) #与窗口的长宽比是相反的360 640
while True:
    cv2.imshow('mouse',img)
    key = cv2.waitKey(1)
    if key & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

        2.图像视频的加载(imread)

2.1:imread

im == image

imread(path,flag)

加入图片可能存在的问题:

        

import cv2
from cv2 import WINDOW_NORMAL

cv2.namedWindow('img',cv2.WINDOW_NORMAL)
img=cv2.imread('/Users/wangcc/Desktop/截屏2022-07-22 下午2.56.35.png')#读入图片

cv2.imshow('img',img)
key=cv2.waitKey(0)

print(key)
print('q')
print(ord('q'))

if(key & 0xFF ==ord('q')): #最好更改成这样 这样才能真正进入退出的代码段执行
    print(1111)
    cv2.destroyAllWindows()#直接替换exit()

 保存图片:

imwrite(name,img).    name:要保存的文件名。img:是mat类型

import cv2
from cv2 import WINDOW_NORMAL

cv2.namedWindow('img',cv2.WINDOW_NORMAL)
img=cv2.imread('/Users/wangcc/Desktop/截屏2022-07-22 下午2.56.35.png')#读入图片

while True:#加了while循环 

    cv2.imshow('img',img)
    key=cv2.waitKey(0)

    if(key &0xFF ==ord('q')):
        break
    elif(key &0xFF ==ord('s')):
        cv2.imwrite('/Users/wangcc/Desktop/截屏2022-07-22 下午2.56.35.jpeg',img)
cv2.destroyAllWindows()

2.2:视频采集:

VideoCapure()

cap.read()  返回两个值,第一个为状态值,读到帧为true,第二个值为视频帧

cap.release()

import cv2

#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480)

#获取视频设备
cap = cv2.VideoCapture(0)

while True:
    ret,frame=cap.read() #从设备中(摄像头)读取数据 视频帧 
                         #一帧一帧的读 循环所以形成了视频

    cv2.imshow('video',frame)  #将获得的视频帧在窗口中显示

    key = cv2.waitKey(10)#等待键盘事件,如果为q退出
    if(key & 0xFF == ord('q')):
        break

#释放videoCapture
cap.release()
cv2.destroyAllWindows()

如何视频文件中读取视频帧:只需在cv2.VideoCapture中写入视频地址即可

#获取视频设备/从视频文件中读取视频帧
cap = cv2.VideoCapture('/Users/wangcc/Desktop/opencv/IMG_5091.MOV')

2.3:如何将视频数据录制成多媒体文件

VideoWriter 参数一位输出文件 参数二为多媒体文件格式(VideoWriter_fourcc)帧率➕分辨率

write

release

#创建VideoWriter为写多媒体文件
fourcc=cv2.VideoWriter_fourcc(*'MJPG')#创建fourcc
vw=cv2.VideoWriter('./out.mp4',fourcc,25,(1280,720)) 
#某一路径下 fourcc 帧率 分辨率要与自己摄像头的分辨率一样

 #写数据到多媒体文件
    vw.writer(frame)

#释放VideoWriter资源
vw.release()

import cv2

#创建VideoWriter为写多媒体文件
fourcc=cv2.VideoWriter_fourcc('M','J','P','G')#创建fourcc
vw=cv2.VideoWriter('/Users/wangcc/Desktop/opencv',fourcc,25,(1296,694)) #某一路径下 fourcc 帧率 分辨率

#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,360)

#获取视频设备/从视频文件中读取视频帧
#cap = cv2.VideoCapture('/Users/wangcc/Desktop/opencv/IMG_5091.MOV')
cap = cv2.VideoCapture(0)

while cap.isOpened(): #判断摄像头是否为打开状态
    ret,frame=cap.read() #从设备中(摄像头)读取数据 视频帧
    if ret == True:
        cv2.imshow('video',frame)  #将获得的视频帧在窗口中显示
        cv2.resizeWindow('video',640,360) #重新将窗口设置为指定大小


        #写数据到多媒体文件
        vw.writer(frame)

        key = cv2.waitKey(1)#等待键盘事件,如果为q退出
        if(key & 0xFF == ord('q')):
            break
    else:
        break

#释放videoCapture
cap.release()

#释放VideoWriter资源
vw.release()
cv2.destroyAllWindows()

TrackBar控件:

        createTrackBar 参数trackbarname(控件名), winname(窗口名),value:trackbar当前值

                                   count:最小值为0,最大值为count。callback,userdate

        getTrackbarPos 参数:输入值trackbarname,winname.   输出:当前值

import cv2
import numpy as np

def callback():
    pass

#创建窗口
cv2.namedWindow('trackbar',cv2.WINDOW_NORMAL)

#创建trackbar
cv2.createTrackbar('R','trackbar',250, 255, callback)
cv2.createTrackbar('G','trackbar',100, 255, callback)
cv2.createTrackbar('B','trackbar',100, 255, callback)

#设置一个纯黑色的背景
img = np.zeros((480,640,3),np.uint8) 
while True:
    
    #获取当前trackbar的值
    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(10)
    if key & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

        3.基本图形的绘制

3.1:openCV的色彩空间

openCV默认使用BGR

YUV:用在视频中  4:2:0  4:2:2  4:4:4

HSV 与 HSL:

        Hue:色相,即色彩,如红色,蓝色

        Saturation:饱和度,颜色的纯度

        Value:明度         Lightness:

openCV色彩空间的转换

 #颜色空间转换
    cvt_img = cv2.cvtColor(img,colorspaces[index])

import cv2

def callback():
    pass

cv2.namedWindow('color',cv2.WINDOW_NORMAL)

img = cv2.imread('/Users/wangcc/Desktop/截屏2022-07-22 下午2.56.35.png')

colorspaces=[cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2BGRA,cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2YUV]
cv2.createTrackbar('curcolor','color',0,len(colorspaces),callback)

while True:

    index = cv2.getTrackbarPos('curcolor','color')

    #颜色空间转换
    cvt_img = cv2.cvtColor(img,colorspa
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值