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()
相关推荐
泰迪智能科技01几秒前
职业技术证书推荐:机器学习工程师证书
人工智能·机器学习
冬奇Lab18 分钟前
企业知识库系列(01):为什么 RAG 只是起点
人工智能
冬奇Lab28 分钟前
开源项目第185期:Orca — YC 支持的 AI Agent 开发环境,并行运行多个 Coding Agent、手机远程监控、Design Mode 直接截图喂给 AI
人工智能·开源·资讯
LPCK_2026062237 分钟前
2026 企业智能体:私有化与 SaaS 部署对比,从安全成本看落地选型
人工智能·安全
学着改变2751 小时前
手持式超声波流量计为何首选行澳科技?便携巡检与外夹计量的性能标杆
大数据·网络·人工智能·科技·产品运营·量子计算
破烂pan1 小时前
AI-Agent-Book第一章思考题
人工智能·agent
AI服务老曹2 小时前
AI视频分析API常见问题和排查清单
人工智能·音视频
youngerwang2 小时前
【从“聊天“到“执行“:MATLAB Agentic AI + MCP Server 实战——以 5G NR PDSCH 波形仿真为例】
人工智能·5g·matlab
沸速存储2 小时前
CPU 和 GPU 核心差别在哪?为什么 AI 训练离不开 GPU
服务器·人工智能·科技·嵌入式硬件·电脑
leoZ2312 小时前
AI 辅助开发的五道坎
开发语言·人工智能·视觉检测·bert·php·超分辨率重建·openvino