欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 火焰識(shí)別Python源碼(附帶QT界面)opencv QT5環(huán)境 [打印本頁(yè)]

作者: 林宏偉    時(shí)間: 2021-4-18 15:59
標(biāo)題: 火焰識(shí)別Python源碼(附帶QT界面)opencv QT5環(huán)境

火焰識(shí)別源碼,親測(cè)有用,下載后需要搭建opencv  QT5的環(huán)境。不懂得話可以私聊我


  1. # -*- coding: cp936 -*-
  2. import sys
  3. import threading #線程模塊
  4. import cv2
  5. import numpy as np
  6. import time
  7. import os
  8. import sys
  9. from PyQt5 import Qt
  10. from PyQt5 import QtCore
  11. from PyQt5.QtGui import QImage, QPixmap,QFont,QIcon
  12. from PyQt5.QtWidgets import (QApplication,QDialog, QFileDialog, QGridLayout,
  13.                 QLabel, QPushButton,QHBoxLayout,QFrame,QWidget,QLineEdit)



  14. font = cv2.FONT_HERSHEY_SIMPLEX #設(shè)置字體

  15. class Work(threading.Thread):
  16.     def __init__(self, caller):
  17.         threading.Thread.__init__(self)
  18.         self.caller = caller #父類調(diào)用者
  19.         self.isHaveFire = False #全局變量是否檢測(cè)到火焰
  20.         
  21.     def run(self): #線程啟動(dòng)后自動(dòng)調(diào)用此函數(shù)
  22.         cap = cv2.VideoCapture()#初始化VideoCapture類對(duì)象
  23.         if(self.caller.video_flag == 1):#標(biāo)志位為1,對(duì)應(yīng)打開(kāi)攝像頭
  24.             cap = cv2.VideoCapture(0)  #打開(kāi)攝像頭
  25.             print("打開(kāi)攝像頭")
  26.         else: #標(biāo)志位為1,對(duì)應(yīng)打開(kāi)視頻文件
  27.             cap = cv2.VideoCapture(self.caller.video_path)#打開(kāi)對(duì)應(yīng)路徑的視頻文件
  28.             print("打開(kāi)視頻文件%s"%self.caller.video_path)
  29.         while(1):
  30.             if(self.caller.flag): #如果視頻結(jié)束標(biāo)志位為1,則退出并清空?qǐng)D像
  31.                 bgImg = np.ones((640,480,3),np.uint8)*240
  32.                 self.showViewImg(self.caller.label, bgImg)
  33.                 break
  34.             ret, frame = cap.read() #讀取視頻或攝像頭幀
  35.             if(ret==False):#取幀失敗,提示退出循環(huán)
  36.                 print("攝像頭打開(kāi)失!" )
  37.                 break
  38.             time.sleep(0.001)
  39.             frame = self.fire_detect(frame)#調(diào)用火焰檢測(cè)函數(shù)
  40.             
  41.             frameTest = frame.copy()#原圖備份
  42.             self.showViewImg(self.caller.label, frame)
  43.             
  44.         cap.release()#釋放VideoCapture類對(duì)象

  45.     def showViewImg(self,label,img):
  46.         # 提取圖像的尺寸和通道, 用于將opencv下的image轉(zhuǎn)換成Qimage
  47.         #self.label.clear()
  48.         channel = 1
  49.         height = width = 1
  50.         try:
  51.             height, width, channel = img.shape
  52.         except:
  53.             channel = 1
  54.         showImg = None
  55.         if channel != 3:
  56.             showImg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
  57.         else:
  58.             showImg = img.copy()
  59.         
  60.         bytesPerLine = 3 * width
  61.         qImg = QImage(showImg.data, width, height, bytesPerLine,
  62.                            QImage.Format_RGB888).rgbSwapped()

  63.         # 將Qimage顯示出來(lái)
  64.         label.setPixmap(QPixmap.fromImage(qImg))
  65.         
  66.     def img_detect(self,img):#加載圖片檢測(cè)火焰
  67.         print("Image Test")
  68.         frame = self.fire_detect(img)#調(diào)用檢測(cè)火焰函數(shù)
  69.         self.showViewImg(self.caller.label, frame)
  70.         
  71.          
  72.     def fire_detect(self,frame): #火焰檢測(cè)函數(shù),核心算法
  73.         self.isHaveFire = False #初始化火焰檢測(cè)結(jié)果標(biāo)志位False
  74.         redThres = 49 #紅色閾值
  75.         sat = 7 #比例系數(shù)
  76.         blackImg = np.zeros((frame.shape[0],frame.shape[1],1),np.uint8)#創(chuàng)建原圖同大小的黑色圖像
  77.         b,g,r = cv2.split(frame)#通道分離
  78.         for i in range(0,frame.shape[0]): #訪問(wèn)所有行
  79.             for j in range(0,frame.shape[1]): #訪問(wèn)所有列
  80.                 B = int(b[i,j])#訪問(wèn)第i行,第j列藍(lán)色像素值
  81.                 G = int(g[i,j])#訪問(wèn)第i行,第j列綠色像素值
  82.                 R = int(r[i,j])#訪問(wèn)第i行,第j列紅色像素值
  83.                 maxValue = max(max(B,G),R)#求RBG像素最大值
  84.                 minValue = min(min(B,G),R)#求RBG像素最小值
  85.                 if (R+G+B) == 0:
  86.                     break
  87.                 S = (1-3.0*minValue/(R+G+B))#計(jì)算S值
  88.                 if(R>redThres and R>=G and G>=B and S>((255-R)*sat/redThres)):#火焰像素刪選
  89.                    blackImg[i,j] = 255 #滿足火焰像素,黑色圖像對(duì)應(yīng)位置變?yōu)榘咨?br />
  90.                 else:
  91.                    blackImg[i,j] = 0 #不滿足火焰像素,黑色圖像對(duì)應(yīng)位置仍為黑色
  92.         blackImg = cv2.medianBlur(blackImg,5)#中值濾波濾除小雜訊
  93.         k1=np.ones((5,5), np.uint8)#指定膨脹核大小5*5
  94.         blackImg = cv2.dilate(blackImg, k1, iterations=1)#膨脹
  95.         #查找火焰部分輪廓
  96.         contours,hierarchy = cv2.findContours(blackImg, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
  97.         index = -1
  98.         maxArea = 0
  99.         for i in range (0,len(contours)):#遍歷輪廓
  100.             (x0, y0, w0, h0) = cv2.boundingRect(contours[i])#獲取輪廓外界矩形
  101.             if(w0>10 and h0>10):#刪選外界矩形寬高均大于10
  102.                 #cv2.rectangle(frame,(x0,y0),(x0+w0,y0+h0),(0,255,0),2)
  103.                 if(w0*h0>maxArea):#比對(duì)輪廓面積
  104.                     maxArea = w0*h0 #獲取最大面積
  105.                     index = i #獲取最大面積對(duì)應(yīng)的輪廓序號(hào)
  106.         if index != -1: #輪廓序號(hào)變化了說(shuō)明沒(méi)檢測(cè)到火焰
  107.             area = cv2.contourArea(contours[index])#獲取火焰輪廓對(duì)應(yīng)的面積
  108.             cv2.putText(frame,("FireArea=%0.2f"%(area)), (5,20), font, 0.7, (0,255,0), 2)#圖片上輸出面積
  109.             (x0, y0, w0, h0) = cv2.boundingRect(contours[index])#獲取外界矩形
  110.             cv2.rectangle(frame,(x0,y0),(x0+w0,y0+h0),(0,255,0),2)#繪制外界矩形框出火焰區(qū)域
  111.             self.isHaveFire = True #檢測(cè)到火焰標(biāo)志位為True,對(duì)應(yīng)會(huì)播放聲音
  112.             
  113.         else: #輪廓序號(hào)沒(méi)變說(shuō)明沒(méi)檢測(cè)到火焰
  114.             cv2.putText(frame,("FireArea=0"), (5,20), font, 0.7, (0,255,0), 2)#火焰面積為0
  115.         return frame #返回最終處理后的圖像
  116.         

  117. if __name__=="__main__":
  118.     pass
復(fù)制代碼

51hei.png (4.56 KB, 下載次數(shù): 207)

51hei.png

火焰識(shí)別源碼.rar

4.06 KB, 下載次數(shù): 60, 下載積分: 黑幣 -5


作者: woshishui22    時(shí)間: 2021-5-12 13:12
現(xiàn)在好多python代碼,早知道不學(xué)C語(yǔ)言了
作者: pppp0    時(shí)間: 2021-6-19 15:08

現(xiàn)在好多python代碼,早知道不學(xué)C語(yǔ)言了
作者: pppp0    時(shí)間: 2021-6-19 15:09

現(xiàn)在好多python代碼,早知道不學(xué)C語(yǔ)言了
作者: 小李滋滋滋    時(shí)間: 2021-10-22 14:41

現(xiàn)在好多python代碼,早知道不學(xué)C語(yǔ)言了

作者: wuwei520    時(shí)間: 2022-1-29 16:14
圖像識(shí)別方面的吧~~~
作者: leeyeeng    時(shí)間: 2022-4-14 17:04
PYTHON 都有哪些庫(kù)?
作者: 愛(ài)瘋的孩紙    時(shí)間: 2022-4-16 08:49
具體怎么使用啊樓主
作者: tuohang2012    時(shí)間: 2022-4-20 20:15
建議樓主寫一個(gè)程序流程,相比會(huì)更完美,同時(shí)增強(qiáng)自己的文字功底。
作者: 皮皮蝦米    時(shí)間: 2022-5-10 10:01
您好 我在Ubuntu系統(tǒng)里運(yùn)行您的代碼 報(bào)錯(cuò)了,錯(cuò)誤如下:
QObject::moveToThread: Current thread (0x107c340) is not the object's thread (0x1745370).
Cannot move to target thread (0x107c340)

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/wyh/.local/lib/python3.8/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb, eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl.
您看這該如何解決




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1