最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PyQt5實(shí)現(xiàn)將Matplotlib圖像嵌入到Scoll Area中顯示滾動(dòng)條效果

 更新時(shí)間:2021年05月18日 11:16:07   作者:勝天半月子  
我想知道是否有一種方法可以在matplotlib上顯示滾動(dòng)條(水平或垂直),顯示包含多個(gè)子槽(sublot2grid)的頁面(plt.show).下面就通過本文給大家分享PyQt5實(shí)現(xiàn)將Matplotlib圖像嵌入到Scoll Area中顯示滾動(dòng)條效果,對(duì)PyQt5 Matplotlib圖像嵌入相關(guān)知識(shí)感興趣的的朋友一起看看吧

前言

如題目所述,又是花費(fèi)了兩天的時(shí)間實(shí)現(xiàn)了該功能,本來今天下午有些心灰意冷,打算放棄嵌入到Scoll Area中的想法,但最后還是心里一緊,仔細(xì)梳理了一下邏輯,最終實(shí)現(xiàn)了功能

效果展示

在這里插入圖片描述

注意:當(dāng)你想實(shí)現(xiàn)一個(gè)子功能的時(shí)候,可以從新創(chuàng)建兩個(gè)文件:

×××.ui文件(如上圖效果展示是和我項(xiàng)目里的位置一樣的)×××.py文件(用來實(shí)現(xiàn)功能)

截圖

在這里插入圖片描述

如上圖所示,紅色框里的文件是實(shí)現(xiàn)效果展示的所有源文件。但是文件夾testcode是為了實(shí)現(xiàn)將Matplotlib圖像嵌入到Scoll Area中所做的所有工作,稍后我會(huì)將參考資源放入文章末尾


一、解決步驟

1.1 qt designer

設(shè)計(jì)ui文件,控件的位置需要和自己項(xiàng)目中控件的位置相同,以便功能實(shí)現(xiàn)后方便項(xiàng)目調(diào)用

在這里插入圖片描述

保存為testpiv.ui文件

1.2 pycharm編寫程序

直加看代碼不懂得話,建議查看1.3中的參考文章,我實(shí)現(xiàn)該功能也是來源于這些

代碼

import cv2
import os
import sys
import math


from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.uic import loadUi

import matplotlib
from matplotlib import pyplot as plt
matplotlib.use("Qt5Agg")  # 聲明使用QT5
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
matplotlib.use("Qt5Agg")  # 聲明使用QT5
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar


#創(chuàng)建一個(gè)matplotlib圖形繪制類
class MyFigure(FigureCanvas):
    def __init__(self,width, height, dpi):
         # 創(chuàng)建一個(gè)Figure,該Figure為matplotlib下的Figure,不是matplotlib.pyplot下面的Figure
        self.fig = plt.figure(figsize=(width, height), dpi=dpi)
         # 在父類中激活Figure窗口,此句必不可少,否則不能顯示圖形
        super(MyFigure,self).__init__(self.fig)
         # 調(diào)用Figure下面的add_subplot方法,類似于matplotlib.pyplot下面的subplot(1,1,1)方法


class scollarea_showpic(QMainWindow):

    def __init__(self, queryPath=None, samplePath=None,limit_value = None):
        super().__init__()
        self.queryPath = queryPath  # 圖庫路徑
        self.samplePath = samplePath  # 樣本圖片
        self.limit_value = limit_value
        self.ui()

        plt.rcParams['font.sans-serif'] = ['KaiTi']  # 只有這樣中文字體才可以顯示

    def ui(self):
        loadUi('./testpiv.ui', self)
        self.SIFT(self.queryPath,self.samplePath,self.limit_value)

    def getMatchNum(self,matches,ratio):
        '''返回特征點(diǎn)匹配數(shù)量和匹配掩碼'''
        matchesMask=[[0,0] for i in range(len(matches))]
        matchNum=0
        for i,(m,n) in enumerate(matches):
            if m.distance < ratio * n.distance: #將距離比率小于ratio的匹配點(diǎn)刪選出來
                matchesMask[i]=[1,0]
                matchNum+=1
        return (matchNum,matchesMask)

    def SIFT(self,dirpath,picpath,limit_value):
        # path='F:/python/gradu_design/gra_des/'

        queryPath=dirpath #圖庫路徑
        samplePath=picpath  #樣本圖片

        comparisonImageList=[] #記錄比較結(jié)果

        #創(chuàng)建SIFT特征提取器
        sift = cv2.xfeatures2d.SIFT_create()

        #創(chuàng)建FLANN匹配對(duì)象

        """
        FLANN是類似最近鄰的快速匹配庫
            它會(huì)根據(jù)數(shù)據(jù)本身選擇最合適的算法來處理數(shù)據(jù)
            比其他搜索算法快10倍
        """
        FLANN_INDEX_KDTREE=0
        indexParams=dict(algorithm=FLANN_INDEX_KDTREE,trees=5)
        searchParams=dict(checks=50)
        flann=cv2.FlannBasedMatcher(indexParams,searchParams)

        sampleImage=cv2.imread(samplePath,0)
        kp1, des1 = sift.detectAndCompute(sampleImage, None) #提取樣本圖片的特征
        for parent,dirnames,filenames in os.walk(queryPath):
            print('parent :',parent,'   ','dirnames :',dirnames)
            for p in filenames:
                p=queryPath+p
                # print('pic file name :',p)
                queryImage=cv2.imread(p,0)

                kp2, des2 = sift.detectAndCompute(queryImage, None) #提取比對(duì)圖片的特征

                matches=flann.knnMatch(des1,des2,k=2) #匹配特征點(diǎn),為了刪選匹配點(diǎn),指定k為2,這樣對(duì)樣本圖的每個(gè)特征點(diǎn),返回兩個(gè)匹配

                (matchNum,matchesMask) = self.getMatchNum(matches,0.9) #通過比率條件,計(jì)算出匹配程度
                matchRatio=matchNum*100/len(matches)
                drawParams=dict(matchColor=(0,255,0),
                        singlePointColor=(255,0,0),
                        matchesMask=matchesMask,
                        flags=0)
                comparisonImage=cv2.drawMatchesKnn(sampleImage,kp1,queryImage,kp2,matches,None,**drawParams)
                comparisonImageList.append((comparisonImage,matchRatio)) #記錄下結(jié)果

        comparisonImageList.sort(key=lambda x:x[1],reverse=True) #按照匹配度排序  降序

        new_comparisonImageList = comparisonImageList[:limit_value]
        count=len(new_comparisonImageList)

        column = 1 # 列
        row = math.ceil(count/column) # 行   math.ceil: 函數(shù)返回大于或等于一個(gè)給定數(shù)字的最小整數(shù)
        print('列:',column,  '  ','行:',row)

        #繪圖顯示
        F = MyFigure(width=10, height=10, dpi=100)  # 500 * 400

        for index,(image,ratio) in enumerate(new_comparisonImageList):
            F.axes = F.fig.add_subplot(row,column,index+1)
            F.axes.set_title('Similiarity %.2f%%' % ratio)
            plt.imshow(image)
            # 調(diào)整subplot之間的間隙大小
            plt.subplots_adjust(hspace=0.2)

        self.figure = F.fig
        # FigureCanvas:畫布
        self.canvas = FigureCanvas(self.figure)  # fig 有 canvas
        self.canvas.resize(self.picwidget.width(), 3000) # 畫布大小
        self.scrollArea = QScrollArea(self.picwidget)  # picwidget上有scroll
        self.scrollArea.setFixedSize(self.picwidget.width(), self.picwidget.height())
        self.scrollArea.setWidget(self.canvas)  # widget上有scroll   scroll有canvas

        self.nav = NavigationToolbar(self.canvas, self.picwidget)  # 創(chuàng)建工具欄

        self.setMinimumSize(self.width(), self.height())
        self.setMaximumSize(self.width(), self.height())
        self.setWindowTitle('Test')
if __name__ == "__main__":
    app = QApplication(sys.argv)
    queryPath='F:/python/gradu_design/gra_des/imges/' #圖庫路徑
    samplePath='F:/python/gradu_design/gra_des/imges/resized_logo1_1.jpg'  #樣本圖片
    main = scollarea_showpic(queryPath,samplePath,3)
    main.show()

    sys.exit(app.exec_())

下載地址

源碼下載:test_scollarea.py


總結(jié)

從目前我的認(rèn)知來講,你想要實(shí)現(xiàn)的功能,基本上換一種思路、想法,都是可能會(huì)有解決方案的,只不過可能難度不同,你需要投入的精力不同。

結(jié)合本篇博客來說,從我產(chǎn)生這個(gè)想法來說,我一直在找資料,從一開始的簡(jiǎn)單搜索同一個(gè)內(nèi)容到后面轉(zhuǎn)變搜索思路,到最后梳理邏輯框架、代碼,最后實(shí)現(xiàn)功能,此過程耗費(fèi)的時(shí)間(兩天多)不算長(zhǎng),但也不算短。中間的過程是煎熬的,幾次試圖想放棄,最后還是挺了過來,還是很開心的。

只要不放棄,你就可以!

以上就是PyQt5實(shí)現(xiàn)將Matplotlib圖像嵌入到Scoll Area中顯示滾動(dòng)條效果的詳細(xì)內(nèi)容,更多關(guān)于PyQt5 Matplotlib圖像嵌入的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Python實(shí)現(xiàn)給企業(yè)微信發(fā)送消息功能

    使用Python實(shí)現(xiàn)給企業(yè)微信發(fā)送消息功能

    本文將介紹如何使用python3給企業(yè)微信發(fā)送消息,文中有詳細(xì)的圖文解說及代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴很有幫助,需要的朋友可以參考下
    2021-12-12
  • Python中selenium獲取token的方法

    Python中selenium獲取token的方法

    本文主要介紹了Python中selenium獲取token的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 如何基于OpenCV&Python實(shí)現(xiàn)霍夫變換圓形檢測(cè)

    如何基于OpenCV&Python實(shí)現(xiàn)霍夫變換圓形檢測(cè)

    最近開始學(xué)習(xí)opencv,想檢測(cè)圖片上的圓環(huán),發(fā)現(xiàn)霍夫變換可以做這樣的效果出來,于是嘗試用霍夫變換做了下圓環(huán)檢測(cè),這篇文章主要給大家介紹了基于OpenCV&Python實(shí)現(xiàn)霍夫變換圓形檢測(cè)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • pytorch框架的詳細(xì)介紹與應(yīng)用詳解

    pytorch框架的詳細(xì)介紹與應(yīng)用詳解

    這篇文章主要介紹了pytorch框架的詳細(xì)介紹與應(yīng)用,Torch?是一個(gè)經(jīng)典的對(duì)多維矩陣數(shù)據(jù)進(jìn)行操作的張量(tensor?)庫,在機(jī)器學(xué)習(xí)和其他數(shù)學(xué)密集型應(yīng)用有廣泛應(yīng)用,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2023-04-04
  • pyqt5?子線程如何操作主線程GUI(示例代碼)

    pyqt5?子線程如何操作主線程GUI(示例代碼)

    這篇文章主要介紹了pyqt5?子線程如何操作主線程GUI,在使用pyqt5編寫gui時(shí)遇到兩個(gè)問題,會(huì)導(dǎo)致界面崩潰,今天就圍繞這兩個(gè)問題來簡(jiǎn)單說明和改進(jìn),需要的朋友可以參考下
    2024-05-05
  • Python?Pygame實(shí)戰(zhàn)之打磚塊游戲的實(shí)現(xiàn)

    Python?Pygame實(shí)戰(zhàn)之打磚塊游戲的實(shí)現(xiàn)

    這篇文章主要介紹了如何利用Python實(shí)現(xiàn)經(jīng)典的游戲—打磚塊。玩家操作一根螢?zāi)簧纤降摹鞍糇印?,讓一顆不斷彈來彈去的“球”在撞擊作為過關(guān)目標(biāo)消去的“磚塊”的途中不會(huì)落到螢?zāi)坏紫隆8信d趣的小伙伴可以了解一下
    2022-03-03
  • python中的格式化輸出用法總結(jié)

    python中的格式化輸出用法總結(jié)

    這篇文章主要介紹了python中的格式化輸出用法,分析了Python格式化輸出的種類并結(jié)合實(shí)例形式總結(jié)了針對(duì)浮點(diǎn)數(shù)的格式化輸出方法,需要的朋友可以參考下
    2016-07-07
  • Python3 字典dictionary入門基礎(chǔ)附實(shí)例

    Python3 字典dictionary入門基礎(chǔ)附實(shí)例

    Python字典是另一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對(duì)象,如字符串、數(shù)字、元組等其他容器模型,字典由鍵和對(duì)應(yīng)值成對(duì)組成,字典也被稱作關(guān)聯(lián)數(shù)組或哈希表
    2020-02-02
  • Python如何定義接口和抽象類

    Python如何定義接口和抽象類

    這篇文章主要介紹了Python如何定義接口和抽象類,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python批量裁剪圖片的思路詳解

    Python批量裁剪圖片的思路詳解

    這篇文章主要介紹了Python批量裁剪圖片的程序代碼,是批量裁剪某一文件夾下的所有圖片,并指定裁剪寬高,本文給大家分享實(shí)現(xiàn)思路,需要的朋友可以參考下
    2022-07-07

最新評(píng)論

丽江市| 灵石县| 稷山县| 株洲县| 和政县| 体育| 广宗县| 金川县| 青铜峡市| 读书| 黄陵县| 苏州市| 庆阳市| 兴仁县| 和平区| 兴化市| 阳东县| 太湖县| 合山市| 乡宁县| 长岭县| 桃江县| 凤山县| 定兴县| 高雄县| 松阳县| 南陵县| 西丰县| 永福县| 道孚县| 津市市| 伊宁市| 乐东| 西吉县| 句容市| 苏尼特右旗| 隆昌县| 正阳县| 永顺县| 泰来县| 香格里拉县|