OpenCV入门

掩码 图像分割

python 复制代码
img = cv2.imread("test.png")
mask = np.zeros(img.shape,dtype= np.uint8)
cv2.circle(
            mask,
           (200,300),  #圆心坐标
           150,        #半径 
           (255,255,255),  #填充的颜色
           -1)          #线条大小  -1 代表实心
seg_img = cv2.bitwise_and(
    img,  #原图
    mask  #掩码图像
)

cv2.imshow('seg',seg_img)
cv2.waitKey()

原图

分割后的效果图

颜色检测

python 复制代码
import cv2
import numpy as np

def MoveTrackbarProc(pos):
    print(pos)

img = cv2.imread("33.png")

#转换为RGB模式转换为HSV模式  HSV模式更容易实现颜色的过滤
hsvimg = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

windowname = 'trawindow'
cv2.namedWindow(windowname)
cv2.resizeWindow(windowname,300,300)
cv2.createTrackbar(
    'h_min',   #创建的滑动条名字
    windowname,
    0,     #    色调最小值
    179,   #Hue 色调的最大值179
    MoveTrackbarProc
    )     #滑动条所属窗口  

cv2.createTrackbar('h_max' , windowname,179,179,MoveTrackbarProc)

#饱和度
cv2.createTrackbar('sat_min',windowname,0,255,MoveTrackbarProc)
cv2.createTrackbar('sat_max',windowname,255,255,MoveTrackbarProc)

#亮度
cv2.createTrackbar('val_min',windowname,0,255,MoveTrackbarProc)
cv2.createTrackbar('val_max',windowname,255,255,MoveTrackbarProc)

while True:
    h_min =   cv2.getTrackbarPos('h_min', windowname)
    h_max =   cv2.getTrackbarPos('h_max', windowname)
    sat_min = cv2.getTrackbarPos('sat_min',windowname)
    sat_max = cv2.getTrackbarPos('sat_max',windowname)
    val_min = cv2.getTrackbarPos('val_min',windowname)
    val_max = cv2.getTrackbarPos('val_max',windowname)
    #对颜色进行过滤 颜色值在设置的范围内 值设置白色  没有在范围内的设置为黑色  得到一个掩码图像
    mask = cv2.inRange(
        hsvimg,  #过滤的图像
        np.array([h_min,sat_min,val_min]),
        np.array([h_max,sat_max,val_max]))
    seg_img = cv2.bitwise_and(img,img,mask=mask)
    cv2.imshow('mask',mask)
    cv2.imshow('set_img',seg_img)
    cv2.imshow('img',img)
    cv2.waitKey(20)

轮廓检测

python 复制代码
import cv2
import numpy as np

img = cv2.imread("txjc.png")

#彩色图像转换为灰度图像  轮廓识别的时候不需要彩色 减少数据运算量
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

#边缘检测 threshold1(低阈值)→ 控制"灵敏度"
#   值越小 → 检测到越多边缘(包括噪点)
#   值越大 → 只保留明显的边缘

# threshold2(高阈值)→ 控制"筛选强度"
#   值越小 → 保留更多弱边缘
#   值越大 → 只保留强边缘

canny = cv2.Canny(gray,100,200)

#轮廓检测 返回值1 检测到的轮廓  返回值2 轮廓的层级
Contours,_=cv2.findContours(
    canny,
    cv2.RETR_EXTERNAL, #返回最外面的边框
    cv2.CHAIN_APPROX_NONE #保存返回的所有轮廓点
    )

for contour in Contours:
    cv2.drawContours(img,
                     contour,
                     -1, #轮廓id   -1代表这个图形所有的轮廓
                     (100,100,100), #轮廓颜色
                     4  #线条宽度
                     )
    #图形面积
    area = cv2.contourArea(contour)
    #周长  参数2 图形是否闭合
    arclen = cv2.arcLength(contour,True)  
    #坐标
    x,y,w,h = cv2.boundingRect(contour)
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

    #顶点坐标
    points = cv2.approxPolyDP(contour,arclen * 0.03, True)
    if  len(points) == 3:
        cv2.putText(img,'sanjiaoxing',(x,y-10),cv2.FONT_HERSHEY_PLAIN,1,(0,255,0),2)
    elif  len(points) == 4:
        cv2.putText(img,'sibianxing',(x,y-10),cv2.FONT_HERSHEY_PLAIN,1,(0,180,0),2)
    elif  len(points) == 5:
        cv2.putText(img,'wubianxing',(x,y-10),cv2.FONT_HERSHEY_PLAIN,1,(0,120,0),2)
    else:
        cv2.putText(img,'duobianxing',(x,y-10),cv2.FONT_HERSHEY_PLAIN,1,(100,120,0),2)

print(len(Contours))
cv2.imshow('canny',canny)
cv2.imshow('img',img)
cv2.waitKey(0)

目标跟踪

python 复制代码
import cv2
import numpy as np

cap = cv2.VideoCapture('resource/person_1.mp4')

#创建跟踪器
tracker = cv2.TrackerCSRT_create()
flag = False
while   True:
    ret,frame = cap.read()
    if not ret:
        break
    code = cv2.waitKey(25)
    if code == ord('a'):
        
        #选择跟踪目标
        roi = cv2.selectROI('track',frame ,showCrosshair=False)

        #初始化跟踪目标
        tracker.init(frame,roi)
        flag = True
    
    if flag:
        #更新这一帧画面
        success,box = tracker.update(frame)
        if success:
            x,y,w,h = box
            cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
    cv2.imshow('track',frame)
cap.release()
cv2.destroyAllWindows()

车流统计

python 复制代码
import cv2
import numpy as np

#背景解除器
subtract = cv2.bgsegm.createBackgroundSubtractorMOG()
cap = cv2.VideoCapture('resource/car.mp4')


while   cap.isOpened():
    ret,frame = cap.read()
    if not ret:
        break

    #画分割线
    cv2.line(frame,(0,500),(1280,500),(0,0,255),2)

    #转换成灰度图像
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    #高斯模糊 清除图像上的噪点 排除干扰
    clearimg = cv2.GaussianBlur(gray,(5,5),0)

    #移动的车是前景  马路和静止的山是背景  先去除掉背景
    #得到移动的车图像
    mask = subtract.apply(clearimg)
    kernel = np.ones((5,5),np.uint8)
    #膨胀 增强特征
    newmask = cv2.dilate(mask,kernel,iterations=2)

    #查找轮廓
    controus ,_= cv2.findContours(newmask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
    for c in controus:
        #去除面积小的噪点
        if  cv2.contourArea(c) < 800:
            continue
        x,y,w,h = cv2.boundingRect(c)
        cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
    cv2.imshow('frame',frame)
    cv2.waitKey(25)
cap.release()
cv2.destroyAllWindows()
相关推荐
回眸&啤酒鸭2 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智2 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
AI的探索之旅2 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein2 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu2 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
wukangjupingbb2 天前
智能网联汽车安全能力框架
人工智能
龙亘川2 天前
明月照湾区,智启新赛道:从顶流文旅IP盛会看智慧文旅升级路径
人工智能·智慧城市·开源软件·数据可视化
飞猫的边缘AI2 天前
边缘AI应用:家用AI摄像头怎么做数据训练?
人工智能·边缘计算·ai算法·边缘ai