学习路径:OpenCV环境搭建(python)->CV基础图像操作(裁剪,画框,拉伸,取色)->固定模型图像分类与识别(Harr)->

YOLO环境搭建->运行官方V8模型->训练模型并运行

基础操作

图像获取及初步处理

图片读入

cv2.imread("frame.jpg",cv2.IMREAD_GRAYSCALE)
#传入图像名,读入什么通道(可不填)

视频读入

cv2.VideoCapture(0)
#参数可填摄像头编号。或本地视频路径(单引号)。或者rtmp网络视频(双引号)
cap=cv2.VideoCapture(0)
cap.set(3,460)
#3宽4高10亮度,调到多少

cv2.imwrite("D:mycodetest/opencv/data/jm/"+str(num)+".123"+".jpg",img)

1111

图像处理

cv2.line(img,(0,0),(img.shape[1],img.shape[0]),(0,255,0),3)
#处理的图像,从那个点开始,那个点结束(宽1长0),用什么颜色,宽度多少
cv2.rectangle(img,(0,0),(250,350),(0,0,255),2)
#基本同上最后参数可以写成cv2.FILLED填充矩形内部
cv2.circle(img,(400,50),30,(255,255,0),5)
#基本同上,第二个为圆心坐标,第三为半径
cv2.putText(img," OPENCV  ",(300,200),cv2.FONT_HERSHEY_COMPLEX,1,(0,150,0),3)
#基本同上,第三为坐标,四字体,五大小,七字体粗细
faceCascade= cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
#图像分类(级联分类器),用haarcascade_frontalface_default.xml的规则进行分类
faces = faceCascade.detectMultiScale(imgGray,1.1,4)
#对图像分类进行其他参数设定。传入图像,传入图像缩放倍数(调参主力?看做速度?),连续几次都识别到才算成功,识别成功的最小尺寸,识别成功的最大尺寸
#此函数结束后返回目标的XYWH,此函数可只填第一个参数其他默认
gray_img= cv2.cvtColor(raw_img,cv2.COLOR_BGR2GRAY)
把GBR通道图片转为灰度
cv2.Canny(image, threshold1, threshold2)
https://blog.csdn.net/wsp_1138886114/article/details/82935839
threshold1:第一个阈值,用于边缘连接;
threshold2:第二个阈值,用于边缘检测;

cv2.dilate(img, kernel, iteration)
img – 目标图片
kernel – 进行操作的内核,默认为3×3的矩阵
iterations – 膨胀次数,默认为1
imgEroded = cv2.erode(imgDialation,(5,5),iterations=1)
同上

基本同上

图像及处理结果展示

图片展示

cv2.imshow("1", binary) #展示的窗口名,展示的图像

视频展示

ret,frame=cap.read() #返回值有两个,分别为是否成功,成功的图像

示例代码

摄像头功能检测


import cv2
import numpy as np
print(cv2.getVersionString())
cap=cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
cap.set(10,150)

while True:
    ret,frame=cap.read()
    cv2.imshow("camera_test", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

Harr模型示例框架

import cv2
import numpy as np
frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture(0)
cap.set(3, frameWidth)
cap.set(4, frameHeight)
cap.set(10,150)


faceCascade= cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
while True:
    ret,img = cap.read()
    imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

    faces = faceCascade.detectMultiScale(imgGray,1.1,10)

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cv2.imshow("Result", img)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

yunet模型框架

opencv_zoo/models/face_detection_yunet at main · opencv/opencv_zoo (github.com)

yunet_demo.gif

YOLOv8模型框架

from ultralytics import YOLO
import cv2
model = YOLO("./Resource/yolov8s.pt")
results = model(0, show=True, conf=0.4, save=False)

资料来源

https://www.bilibili.com/video/BV16K411W7x9/

https://www.bilibili.com/video/BV1BT4y1Z7WS

kongfanhe/opencv_tutorial (github.com)

murtazahassan/Learn-OpenCV-in-3-hours (github.com)

https://www.bilibili.com/video/BV1Mu411F7MD