精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用圖像處理庫OpenCV從攝像頭獲取數據并在PyQt5上顯示出來

全志在線 ? 來源:全志在線 ? 2024-01-05 17:32 ? 次閱讀

OpenCV能夠處理圖像、視頻、深度圖像等各種類型的視覺數據,在某些情況下,盡管OpenCV可以顯示窗口,但PyQt5可能更適合用于創建復雜的交互式應用程序,而自帶GPU的H618就成為了這些圖像顯示的最佳載體。

本文將實現的功能是使用圖像處理庫OpenCV從攝像頭獲取數據,縮放后從PyQt5的窗口中顯示出來。

78f0162e-abac-11ee-8b88-92fbcf53809c.png

創建pyqt5窗口

這里在電腦上使用designer軟件,創建一個Main Window類型窗體。從左邊組件欄中拖出一個label放到窗口中間。

點一下放在窗口中的label,在軟件右下角的屬性編輯器里可以設置很多東西,這里就不細介紹了。這里我是設置了QFrame啟用了邊框,QLabel中的texte屬性控制顯示的文本,QLabel中的alignment屬性控制文本對齊方式。

然后保存為.ui結尾的文件:

7915584e-abac-11ee-8b88-92fbcf53809c.png

隨后將designer繪制的ui文件轉化為py文件

python3 -m PyQt5.uic.pyuic ui_main.ui -o ui_main.py

接下來編寫main.py程序,調用剛剛畫的窗口進行顯示,先把剛剛的ui_main.py以及一些qt庫給import進來:

from ui_main import Ui_MainWindow


import PyQt5
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *


# 修正qt的plugin路徑,因為某些程序(cv2)會將其改到其他路徑
import os
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = os.path.dirname(PyQt5.__file__)

放入一點輔助代碼,一個是為了實現從遠程命令行運行qt程序顯示到桌面上,一個是為了在命令行下可以按ctrl+c快捷鍵來強制退出qt程序

#【可選代碼】允許遠程運行
import os
os.environ["DISPLAY"] = ":0.0"


#【建議代碼】允許終端通過ctrl+c中斷窗口,方便調試
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
timer = QtCore.QTimer()
timer.start(100) # You may change this if you wish.
timer.timeout.connect(lambda: None) # Let the interpreter run each 100 ms

加上調用函數進行顯示的部分,這個顯示pyqt5窗口的基本程序就完成了

# 初始化窗口
import sys
app = QtWidgets.QApplication(sys.argv)
window = WINDOW()
ui = Ui_MainWindow()
ui.setupUi(window)
window.showFullScreen() #全屏顯示
# window.show() #按繪制時的尺寸顯示
sys.exit(app.exec_())
791f54c0-abac-11ee-8b88-92fbcf53809c.png

在核桃派lcd屏上的效果展示

OpenCV圖像讀取及顯示

調用頭文件,opencv的頭文件只需要這一個

import cv2

打開攝像頭,其中傳入的參數1是攝像頭編號,一般是從0開始往后排

cap = cv2.VideoCapture(1)

從攝像頭讀取一幀圖像,ret是讀取狀態,frame是圖像數據

ret, frame = cap.read()

cap.read函數讀到的是bgr格式的,為了把opencv的圖像數據顯示到qt的label,需要先轉為rgb格式,并將圖像轉為Qt中用來表示圖像的QImage。

rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)


h, w, ch = rgbImage.shape
qtImage = QImage(rgbImage.data, h, w, ch*w, QtGui.QImage.Format_RGB888)

label的setPixmap方法可以圖像數據覆蓋label

label.setPixmap(QPixmap.fromImage(qtImage))
79568e4a-abac-11ee-8b88-92fbcf53809c.png

顯示效果

線程,信號與槽

原代碼為了簡單,沒有使用信號槽機制,不夠線程安全,我們這里使用qt自帶的多線程功能,他的使用很簡單,只需要創建一個類并繼承自QThread, 然后將要運行的東西寫到類里的run方法下面。實例化一個對象后,調用start方法即可創建新線程

class Work(QThread):
  def run(self):
    pass
work = Work()
work.start()

直接在線程內調用函數去修改qt窗口的內容,不能滿足線程安全。

我們需要創建一個信號,把修改qt窗口的語句寫到一個槽內,連接他們,在想修改窗口時發出信號,讓qt內部去調度,防止跟其他qt內部的線程發生沖突。

78f0162e-abac-11ee-8b88-92fbcf53809c.png

因為我們這個線程類繼承自QThread,所以可以在類內定義信號。只需要實例化一個pyqtSignal對象即可,調用時括號內的參數決定了槽函數必須有什么類型的參數,以及發送信號時需要傳入什么參數。

 signal_update_label = pyqtSignal( QPixmap)

槽函數就是隨便定義一個函數,只要函數參數跟信號一樣就行。

 label:QLabel
  def sloat_update_label( self, pixmap:QPixmap):
    self.label.setPixmap(pixmap)

使用emit方法即可發送信號,qt內部會進行調度,將所有連接到本信號的函數都調出來運行,并將參數傳給他們。這是qt實現線程安全的重要機制。

self.signal_update_label.emit(QPixmap.fromImage(qtImage))

本文轉載自:https://forum.walnutpi.com/t/topic/84







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RGB
    RGB
    +關注

    關注

    4

    文章

    798

    瀏覽量

    58394
  • OpenCV
    +關注

    關注

    30

    文章

    628

    瀏覽量

    41273
  • pyqt5
    +關注

    關注

    0

    文章

    25

    瀏覽量

    3394

原文標題:可視可交互!H618上用OpenCV讀取圖像顯示到PyQt5窗口上

文章出處:【微信號:gh_79acfa3aa3e3,微信公眾號:全志在線】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    可視可交互!H618OpenCV讀取圖像顯示PyQt5窗口上

    這里分享一個代碼,功能是使用圖像處理opencv攝像頭
    發表于 01-10 09:55

    攝像頭采集圖像處理

    就可以做到實際中圖像處理并且做到無線傳輸。這樣的圖像采集處理功能在監控系統和在線檢測都有很大的前景。 本作品是基于安芯一號SLH89F5162單片機,驅動并控制帶FIFO的OV7670
    發表于 11-05 22:35

    OpenWRT + OpenCV 無線攝像頭監控和圖像處理

    知道視頻流是jpeg類型,因此“偽造”了一個jpeg文件名下圖是修改OpenCV官網的一個demo,親測在路由獲取圖像可行(分別從筆記本攝像頭
    發表于 02-09 22:15

    【OK210試用體驗】之(五)——在Ubuntu12.04安裝OpenCV2.4.9并實現USB攝像頭C270圖像采集

    邁進。今天帖子的主要內容就是在Ubuntu12.04安裝圖像處理軟件OpenCV,并用簡單的程序實現UVC攝像頭C270的
    發表于 08-02 12:21

    【Nanopi NEO試用體驗】【機器學習/計算機視覺/NLP操作篇】USB攝像頭的使用以及ascii顯示攝像頭畫面

    去掉,只留下resize跟cvtcolor就是這樣了!那么這個圖片里是什么呢?相信大家已經猜出來了!那么問題來了,這樣子做只是能夠把攝像頭捕捉的畫面以粗暴的方式顯示出來而已,而對于opencv
    發表于 10-29 15:40

    【新手求助】關于樹莓派+opencv+攝像頭圖像處理的問題?

    使用樹莓派3B,原裝攝像頭800W像素,c++和opencv。對亮斑進行拍攝,并求取光斑重心。怎么能有效提高精度和速度?流程是這樣的:opencv控制攝像頭拍照;提取單通道像素值;
    發表于 11-09 08:57

    基于STM32單片機的攝像頭圖像采集的處理系統

    處理顯示系統,完成了圖像的快速采集、存儲、數據處理圖像顯示。首先
    發表于 09-06 16:21

    如何攝像頭獲取圖像并保存和實時顯示

    開發環境,包括相關源的更新,的安裝,按照上次blog中的介紹,安裝好Python-opencv和導入cv2后,就可以進行接下來我們今天的學習了,今天將叫大家進一步實現如何
    發表于 09-25 15:15

    ov5640攝像頭采集的圖像顯示出來是錯誤的

    `STM32板子ov5640攝像頭采集的JPEG數據圖像顯示出來是錯誤的。這樣的問題因為什么?該如何修改呢?`
    發表于 04-16 21:12

    【大聯大友尚安森美半導體感光芯片USB雙目攝像頭模組試用體驗】使用opencv打開攝像頭

    。因為光照的不同會對識別的效果產生質的影響。因為目前的視覺系統只是認為識別到的是一個多通道的平面圖像,而再此基礎做出了圖像處理(濾波,灰度等)
    發表于 09-26 21:54

    如何去實現一種基于opencv與flask的攝像頭圖像傳輸呢

    硬件:eaidk610(fedaro28)、普通帶usb接口攝像頭軟件環境: python3.9、opencv4.6、Flask2.2主要實現了板子的連接的攝像頭收集
    發表于 10-18 14:25

    如何在OKMX6UL-C利用攝像頭圖像采集呢

    要求在OKMX6UL-C(emmc版本)利用攝像頭圖像采集、視頻采集,需要在LCD屏幕上將圖像或視頻顯示出來1. 請問該采用什么類型的
    發表于 12-02 06:49

    【EASY EAI Nano開源套件試用體驗】3. OpenCV 圖像處理開發測試

    功的顯示出mipi攝像頭采集的視頻畫面和文件: 四、OpenCV 開發測試OpenCV是圖形圖像處理常用的一個工具,它提供了非常豐富的視覺
    發表于 03-08 00:03

    PyQt5的中文教程電子書免費下載

     本教程的目的是帶領你入門PyQt5。教程內所有代碼都在Linux測試通過。PyQt4 教程是PyQt4的教程,PyQt4是一個Pytho
    發表于 08-06 08:00 ?13次下載
    <b class='flag-5'>PyQt5</b>的中文教程電子書免費下載

    在核桃派上實現USB攝像頭OpenCV顏色檢測

    在前幾周的文章中已經介紹過如何在核桃派上用OpenCV讀取圖像顯示pyqt5的窗口上,這里在上一篇文章的基礎,給開發板加入顏色檢測功能
    的頭像 發表于 01-20 17:50 ?897次閱讀
    在核桃派上實現USB<b class='flag-5'>攝像頭</b>的<b class='flag-5'>OpenCV</b>顏色檢測