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

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值