国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

可視可交互!在全志H618上用OpenCV讀取圖像顯示到PyQt5窗口上

這篇具有很好參考價值的文章主要介紹了可視可交互!在全志H618上用OpenCV讀取圖像顯示到PyQt5窗口上。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

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

這里分享一個代碼,功能是使用圖像處理庫opencv從攝像頭獲取數(shù)據(jù),縮放后從pyqt5的窗口中顯示出來。

可視可交互!在全志H618上用OpenCV讀取圖像顯示到PyQt5窗口上,全志H616,智能硬件,交互,opencv,qt,計算機(jī)視覺,視覺檢測

安裝opencv

sudo pip3 install opencv-python

創(chuàng)建一個pyqt5窗口

1. 用Qt Designer畫個窗口
這里我在電腦上使用designer軟件,創(chuàng)建一個Main Window類型窗體。從左邊組件欄中拖出一個label放到窗口中間。

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

然后保存為.ui結(jié)尾的文件

可視可交互!在全志H618上用OpenCV讀取圖像顯示到PyQt5窗口上,全志H616,智能硬件,交互,opencv,qt,計算機(jī)視覺,視覺檢測

2. 將designer繪制的ui文件轉(zhuǎn)化為py文件

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

3. 編寫main.py程序,調(diào)用剛剛畫的窗口進(jìn)行顯示
先把剛剛的ui_main.py以及一些qt庫給import進(jìn)來

from  ui_main import Ui_MainWindow

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

# 修正qt的plugin路徑,因?yàn)槟承┏绦颍╟v2)會將其改到其他路徑
import os
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = os.path.dirname(PyQt5.__file__)

放入一點(diǎn)輔助代碼,一個是為了實(shí)現(xiàn)從遠(yuǎn)程命令行運(yùn)行qt程序顯示到桌面上,一個是為了在命令行下可以按ctrl+c快捷鍵來強(qiáng)制退出qt程序

#【可選代碼】允許遠(yuǎn)程運(yùn)行
import os
os.environ["DISPLAY"] = ":0.0"

#【建議代碼】允許終端通過ctrl+c中斷窗口,方便調(diào)試
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

定義窗口類,重寫窗口的一些觸發(fā)事件。這里我修改了鼠標(biāo)點(diǎn)擊后會被自動調(diào)用的mousePressEvent和窗口繪制時會被調(diào)用的paintEvent

class WINDOW(QtWidgets.QMainWindow):

    def mousePressEvent(self, event):
        # 被左鍵點(diǎn)擊后退出本程序
        if event.button() == Qt.LeftButton:
            self.close()
            exit(-1)

    def paintEvent(self,event):
        # 修改label的大小和位置
        new_width = int(window.width()/10*8)
        new_height = int(window.height()/10*8)
        lab_x = int((window.width() - new_width) / 2)
        lab_y = int((window.height() - new_height) / 2)
        ui.label.setGeometry( lab_x, lab_y, new_width, new_height)

加上調(diào)用函數(shù)進(jìn)行顯示的部分,這個顯示pyqt5窗口的基本程序就完成了

# 初始化窗口
import sys
app = QtWidgets.QApplication(sys.argv)
window = WINDOW()
ui = Ui_MainWindow()
ui.setupUi(window)
window.showFullScreen() #全屏顯示
# window.show() #按繪制時的尺寸顯示
sys.exit(app.exec_())

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

可視可交互!在全志H618上用OpenCV讀取圖像顯示到PyQt5窗口上,全志H616,智能硬件,交互,opencv,qt,計算機(jī)視覺,視覺檢測

opencv怎么讀取攝像頭

調(diào)用頭文件,opencv的頭文件只需要這一個

import cv2

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

cap = cv2.VideoCapture(1)

從攝像頭讀取一幀圖像,ret是讀取狀態(tài),frame是圖像數(shù)據(jù)

ret, frame = cap.read()

怎么把opencv的圖像數(shù)據(jù)顯示到qt的label

cap.read函數(shù)讀到的是bgr格式的,需要先轉(zhuǎn)為rgb格式

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

將圖像轉(zhuǎn)為Qt中用來表示圖像的QImage

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

label的setPixmap方法可以圖像數(shù)據(jù)覆蓋label

label.setPixmap(QPixmap.fromImage(qtImage))

線程,信號與槽

我們這里使用qt自帶的多線程功能,他的使用很簡單,只需要創(chuàng)建一個類并繼承自QThread, 然后將要運(yùn)行的東西寫到類里的run方法下面。實(shí)例化一個對象后,調(diào)用start方法即可創(chuàng)建新線程

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

直接在線程內(nèi)調(diào)用函數(shù)去修改qt窗口的內(nèi)容,不能滿足線程安全。

我們需要創(chuàng)建一個信號,把修改qt窗口的語句寫到一個槽內(nèi),連接他們,在想修改窗口時發(fā)出信號,讓qt內(nèi)部去調(diào)度,防止跟其他qt內(nèi)部的線程發(fā)生沖突。

因?yàn)槲覀冞@個線程類繼承自QThread,所以可以在類內(nèi)定義信號。只需要實(shí)例化一個pyqtSignal對象即可,調(diào)用時括號內(nèi)的參數(shù)決定了槽函數(shù)必須有什么類型的參數(shù),以及發(fā)送信號時需要傳入什么參數(shù)。

```

signal_update_label = pyqtSignal( QPixmap)


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

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

連接信號與槽,使用connect方法即可

self.signal_update_label.connect(self.sloat_update_label)

使用emit方法即可發(fā)送信號,qt內(nèi)部會進(jìn)行調(diào)度,將所有連接到本信號的函數(shù)都調(diào)出來運(yùn)行,并將參數(shù)傳給他們。這是qt實(shí)現(xiàn)線程安全的重要機(jī)制。

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

最終代碼

import cv2
from  ui_main import Ui_MainWindow

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

# 修正qt的plugin路徑,因?yàn)槟承┏绦颍╟v2)會將其改到其他路徑
import os
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = os.path.dirname(PyQt5.__file__)


#【可選代碼】允許Thonny遠(yuǎn)程運(yùn)行
import os
os.environ["DISPLAY"] = ":0.0"

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

# 線程類
class Work(QThread):
    signal_update_label = pyqtSignal(QPixmap)
    label:QLabel
    def sloat_update_label( self, pixmap:QPixmap):
        self.label.setPixmap(pixmap)

    def run(self):
        print("label.width()=", self.label.width())
        print("label.height()=", self.label.height())
        self.signal_update_label.connect(self.sloat_update_label)
        cap = cv2.VideoCapture(1)
        while True:
            ret, frame = cap.read()
            if ret:

                # 顏色轉(zhuǎn)換
                rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

                # 按比例縮放
                h, w, ch = rgbImage.shape
                aspect_ratio = w / h
                new_width = self.label.width()
                new_height = int(new_width / aspect_ratio)
                if new_height > self.label.height():
                    new_height = self.label.height()
                    new_width = int(new_height * aspect_ratio)
                rgbImage = cv2.resize(rgbImage, (new_width, new_height))
                
                # 顯示到label
                bytesPerLine = ch * new_width
                self.signal_update_label.emit(QPixmap.fromImage(QImage(rgbImage.data, new_width, new_height, bytesPerLine, QImage.Format_RGB888)))
            else :
                print("cap read error")
                return

class WINDOW(QMainWindow):
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.close()
    def paintEvent(self,event):
        new_width = int(window.width()/10*8)
        new_height = int(window.height()/10*8)
        lab_x = int((window.width() - new_width) / 2)
        lab_y = int((window.height() - new_height) / 2)
        ui.label.setGeometry( lab_x, lab_y, new_width, new_height)


import sys
app = QApplication(sys.argv)
window = WINDOW()
ui = Ui_MainWindow()
ui.setupUi(window)
window.showFullScreen() #全屏顯示
# window.show() #按繪制時的尺寸顯示

# 創(chuàng)建讀取攝像頭并顯示的線程
work = Work()
work.label = ui.label
work.start()

sys.exit(app.exec_())

可視可交互!在全志H618上用OpenCV讀取圖像顯示到PyQt5窗口上,全志H616,智能硬件,交互,opencv,qt,計算機(jī)視覺,視覺檢測文章來源地址http://www.zghlxwxcb.cn/news/detail-790294.html

到了這里,關(guān)于可視可交互!在全志H618上用OpenCV讀取圖像顯示到PyQt5窗口上的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Orangepi Zero2 全志H616】驅(qū)動串口實(shí)現(xiàn)Tik Tok—VUI(語音交互)

    【Orangepi Zero2 全志H616】驅(qū)動串口實(shí)現(xiàn)Tik Tok—VUI(語音交互)

    一、編程實(shí)現(xiàn)語音和開發(fā)板通信 wiringpi庫源碼 demo.c 二、基于前面串口的代碼修改實(shí)現(xiàn) uartTool.h uartTool.c uartTest.c 三、ADB adb控制指令 四、手機(jī)接入Linux熱拔插相關(guān) a. 把手機(jī)接入開發(fā)板 b. 安裝adb工具,在終端輸入adb安裝指令: sudo apt-get install adb c. dmeg能查看到手機(jī)接入的信息,

    2024年02月21日
    瀏覽(30)
  • 你相信光嗎?開源一個能進(jìn)行虛擬光渲交互的全志D1s智能家居中控

    你相信光嗎?開源一個能進(jìn)行虛擬光渲交互的全志D1s智能家居中控

    本文所介紹產(chǎn)品demo是在立創(chuàng)開源平臺的開源作品**《全志D1s智能家居中控虛擬光渲交互(86盒)》**,項目選用RISC-V核心的全志D1s作為主控進(jìn)行開發(fā),并通過家庭WIFI內(nèi)網(wǎng),實(shí)現(xiàn)設(shè)備間MQTT通信,與其它開源單片機(jī)控制項目進(jìn)行充分聯(lián)動, 旨在推廣類似客制化鍵盤概念到智能家居領(lǐng)

    2024年02月02日
    瀏覽(22)
  • 花費(fèi)200元,我用全志H616和雪糕棒手搓了一臺可UI交互的視覺循跡小車

    花費(fèi)200元,我用全志H616和雪糕棒手搓了一臺可UI交互的視覺循跡小車

    常見的視覺循跡小車都具備有路徑識別、軌跡跟蹤、轉(zhuǎn)向避障、自主決策等基本功能,如果不采用紅外避障的方案,那么想要完全滿足以上這些功能,攝像頭、電機(jī)、傳感器這類關(guān)鍵部件缺一不可,由此一來小車成本也就難以控制了。 但如果,有這樣一款視覺循跡小車,它可

    2024年02月21日
    瀏覽(25)
  • R2在全渠道業(yè)務(wù)線的落地

    隨著業(yè)務(wù)的增長,系統(tǒng)的高頻率迭代,質(zhì)量保障工作迫切需要引入更加科學(xué)高效的測試方法來助力業(yè)務(wù)高質(zhì)量的交付。長城項目一期測試中,全渠道質(zhì)量團(tuán)隊引入技術(shù)平臺部R2技術(shù),極大的提升了項目交付的質(zhì)量。因此,本文將重點(diǎn)介紹全渠道質(zhì)量團(tuán)隊是如何利用R2來保障業(yè)務(wù)

    2024年02月14日
    瀏覽(22)
  • python三維建模可視化與交互,python三維建??梢暬? decoding=

    python三維建??梢暬c交互,python三維建模可視化

    本篇文章給大家談?wù)刾ython三維建??梢暬c交互,以及python三維建??梢暬?,希望對各位有所幫助,不要忘了收藏本站喔。 一、 內(nèi)容介紹 人類是那么得有創(chuàng)造力,我們創(chuàng)造、發(fā)明、設(shè)計、生產(chǎn)了一切大自然沒有直接給予我們的東西使我們的生活變得更輕松更美好。在過去,

    2024年01月23日
    瀏覽(23)
  • 神經(jīng)網(wǎng)絡(luò)的可視化:使用3D可視化和交互式界面來展示模型

    作者:禪與計算機(jī)程序設(shè)計藝術(shù) 作為人工智能領(lǐng)域的從業(yè)者,我們常常需要與其他技術(shù)人員或者領(lǐng)域內(nèi)的專家進(jìn)行交流。在這個過程中,一個關(guān)鍵的問題是如何讓復(fù)雜的神經(jīng)網(wǎng)絡(luò)模型變得易于理解和分析。今天,我們將探討如何使用3D可視化和交互式界面來展示神經(jīng)網(wǎng)絡(luò)模型

    2024年02月14日
    瀏覽(26)
  • 3d智能工廠工藝流轉(zhuǎn)可視化交互展示應(yīng)用優(yōu)點(diǎn)

    3d智能工廠工藝流轉(zhuǎn)可視化交互展示應(yīng)用優(yōu)點(diǎn)

    傳統(tǒng)的反應(yīng)式維護(hù)存在以下缺點(diǎn):售后服務(wù)響應(yīng)速度慢;維護(hù)成本高;生產(chǎn)效率低下;停車率高;管理成本高;無法應(yīng)對合格工程師不足的情況。 隨著5G、云計算、物聯(lián)網(wǎng)和大數(shù)據(jù)等技術(shù)的應(yīng)用,智慧工廠已經(jīng)成為產(chǎn)業(yè)關(guān)注的焦點(diǎn),企業(yè)將持續(xù)建設(shè)“智慧工廠”。 深圳華銳視點(diǎn) 基于

    2024年02月02日
    瀏覽(37)
  • 數(shù)據(jù)分析基礎(chǔ)-數(shù)據(jù)可視化學(xué)習(xí)筆記06-交互架構(gòu)

    對視覺表?進(jìn)?操作 · 視覺分析的可視化應(yīng)有助于對視覺表?數(shù)據(jù)的操作 · ?系列反饋回路 · 概述 · 放?/縮? · 選擇 · 篩選 · 查找相關(guān)信息 · 促進(jìn)數(shù)據(jù)空間的探索。 · 選擇和操作 · 直接處理數(shù)據(jù)的視覺表?。 · 探索與導(dǎo)航 · 理解并?過視覺呈現(xiàn)的空間。 從列表中選

    2024年02月10日
    瀏覽(25)
  • 數(shù)據(jù)分析基礎(chǔ)-數(shù)據(jù)可視化學(xué)習(xí)筆記05-交互模型

    理解交互中的人類認(rèn)知行為 ?人類信息處理模型 ?生態(tài)模型 ?社交互動模型 ?在認(rèn)知心理學(xué)中——人類被視為一個信息處理單元 ?認(rèn)知過程被建模為該 IP 單元上的一系列信息過程 ?了解人類認(rèn)知過程,例如推理、解決問題、記憶和學(xué)習(xí) ?SK Card、TP Moran 和 A. Newell:人機(jī)交

    2024年02月11日
    瀏覽(15)
  • OpenCV快速入門:窗口交互

    OpenCV快速入門:窗口交互

    OpenCV是一種強(qiáng)大的計算機(jī)視覺庫,廣泛用于圖像處理和計算機(jī)視覺應(yīng)用。本文將介紹OpenCV中的窗口交互功能,重點(diǎn)關(guān)注鼠標(biāo)和鍵盤的操作,以及如何添加窗口控件來實(shí)現(xiàn)更豐富的用戶體驗(yàn)。 OpenCV提供了豐富的鼠標(biāo)交互功能,包括但不限于: 獲取鼠標(biāo)的坐標(biāo)位置 監(jiān)聽鼠標(biāo)點(diǎn)擊

    2024年02月04日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包