学习路径: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)
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
评论区