栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

摄像头识别黑烟加框处理(测试)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

摄像头识别黑烟加框处理(测试)

import sys
import cv2
import numpy as np
import imutils
import datetime
def test_lingeman():  # 识别黑烟

    camera = cv2.VideoCapture("")
    ret2, img2 = camera.read()
    frame1 = img2
    # frame=cv2.imread("2.jpeg")
    # prevframe = frame
    prevframe4 = np.array(frame1)
    cv2.namedWindow('result', 0)
    cv2.resizeWindow('result', 800, 500)

    prevframe3 = cv2.cvtColor(prevframe4, cv2.COLOR_RGB2GRAY)  # 先取一帧

    cap = cv2.VideoCapture("rtsp://admin:hn28099668@192.168.1.119:554/Streaming/Channels/102")

    # 获取视频帧的宽和高
    w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
    h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

    # 获取视频总帧数和fps
    count = cap.get(cv2.CAP_PROP_FRAME_COUNT)
    fps = cap.get(cv2.CAP_PROP_FPS)

    # 视频保存
    # fourcc = cv.VideoWriter_fourcc('P', 'I', 'M', '1')
    # fourcc = cv.VideoWriter_fourcc(*'XVID')
    # 视频编码格式
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    TimeS = datetime.datetime.now().strftime('%H%M%S%f')[0:7]
    nowtime = datetime.datetime.now().strftime('%Y%m%d_' + TimeS) + '.mp4'  # 视频文件名
    nowtimejp = datetime.datetime.now().strftime('%Y%m%d_' + TimeS) + '.jpg'  # 图片文件名
    tempAviFilejp = 'D:/lzk/pythonProject3/HN_Data/' + nowtimejp  # 保存图片的文件名
    tempAviFile = 'D:/lzk/pythonProject3/HN_Data/'+nowtime  # 保存的文件名


    jis = 200

    out = cv2.VideoWriter('D:/lzk/pythonProject3/HN_Data/'+nowtime, fourcc, fps,
                          (int(w), int(h)), True)  # 保存一个视频

    while camera.isOpened():
        jis -= 1
        ret, img = camera.read()
        base = img
        left_point_x = 0
        right_point_x = 0
        top_point_y = 0
        bottom_point_y = 0

        frame = np.array(img)
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
        frame = cv2.blur(frame, (5, 5))
        box = NULL
        global prevframe2
        nextframe = frame

        diff = cv2.absdiff(prevframe3, nextframe)

        ret4, thresh4 = cv2.threshold(diff, 40, 80, cv2.THRESH_BINARY)

        # y, x = diff.shape[:-1]
        # frame = QImage(diff, x, y, QImage.Format_RGB888)
        # Ui_Dialog.setupUi.scene2.clear()  # 先清空上次的残留
        # self.pix = QPixmap.fromImage(frame)
        # self.scene.addPixmap(self.pix)
        k2 = np.ones((40, 40), np.uint8)
        # a,b,c,d=cv2.MinMaxLoc(frame,mask)
        # mean=cv2.Mean(frame,mask)

        k = np.ones((40, 40), np.uint8)
        opening = cv2.morphologyEx(thresh4, cv2.MORPH_OPEN, k)  # 开运算

        closing2 = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, k2)
        cnts = cv2.findContours(closing2.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        cnts = imutils.grab_contours(cnts)
        ret, labels, status, centroids = cv2.connectedComponentsWithStats(closing2, connectivity=8)
        image_filtered = np.zeros_like(thresh4)
        for (i, label) in enumerate(np.unique(labels)):
            # 如果是背景,忽略
            if label == 0:
                continue
            if status[i][-1] > 50:
                image_filtered[labels == i] = 255
        global mean
        cnts = cv2.findContours(closing2.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        cnts = imutils.grab_contours(cnts)
        mean = cv2.mean(prevframe3, image_filtered)

        for i, c in enumerate(cnts):
            # 找到边界坐标
            x, y, w, h = cv2.boundingRect(c)  # 计算点集最外面的矩形边界
            cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

            # 找面积最小的矩形
            rect = cv2.minAreaRect(c)
            # 得到最小矩形的坐标
            box = cv2.boxPoints(rect)
            # 标准化坐标到整数
            box = np.int0(box)
            # 画出边界
            cv2.drawContours(img, [box], 0, (0, 255, 0), 3)

            left_point_x = np.min(box[:, 0])
            right_point_x = np.max(box[:, 0])
            top_point_y = np.min(box[:, 1])
            bottom_point_y = np.max(box[:, 1])
            # 计算最小封闭圆的中心和半径
        mage_filtered = np.zeros_like(closing2)
        if ([box] != NULL):
            mage_filtered[left_point_x:right_point_x, top_point_y:bottom_point_y] = 255
        global list
        global mask
        global picture
        if (ret != False):
            list.append(base)
            mask.append(
                mage_filtered)
        else:
            continue

        out.write(img)

        if jis == 0:
            cv2.imwrite(tempAviFilejp, img)

        cv2.imshow("result", img)
        if cv2.waitKey(1) == ord('e'):
            out.release()
            camera.release()
            break
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002413.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号