cv2實現氣泡排序視覺化

2021-10-06 06:37:47 字數 4087 閱讀 9120

之前在網上看到別人用opencv,pygame實現多種排序演算法的視覺化,十分有趣。參考文章:python實現排序演算法過程的視覺化

便通過氣泡排序進行嘗試,簡化了程式,主要嘗試opencv視覺化資料排序過程。

import numpy as np

import os

import cv2

class

dataseq()

:

white =

(255

,255

,255

) red =(0

,0,255

) black =(0

,0,0

) yellow =(0

,127

,255

)def

__init__

(self, data=

none

,sort_type=

'figure'):

self.sort_type=sort_type

self.interval=

5 self.inter=

2if data==

none

:print

("there are no data to sort!!!"

) os.exit(

)else

: self.data=data

self.maxd=

max(self.data)

self.mind=

min(self.data)

self.getfigure(

) self.visualize(

) self.sortdata(

)def

getfigure

(self)

: datanum=

len(self.data)

maxd=

max(self.data)

mind=

min(self.data)

self.figure=np.full(

(500

*(maxd-mind)+50

,(datanum)

*(self.interval+self.inter),3

),255,dtype=np.uint8)

for i in

range

(len

(self.data)):

self.figure[-50

-(self.data[i]

-mind)

*500:,

(i)*

(self.interval+self.inter)

:(i)

*(self.interval+self.inter)

+self.interval]

=self.yellow

defchoice

(self, i, j)

: mind=self.mind

self.figure[-50

-(self.data[i]

-mind)

*500:,

(i)*

(self.interval+self.inter)

:(i)

*(self.interval+self.inter)

+self.interval]

=self.black

self.figure[-50

-(self.data[j]

-mind)

*500:,

(j)*

(self.interval+self.inter)

:(j)

*(self.interval+self.inter)

+self.interval]

=self.black

self.visualize(

)def

change

(self,i,j)

: mind=self.mind

self.figure[-50

-(self.data[i]

-mind)

*500:,

(i)*

(self.interval+self.inter)

:(i)

*(self.interval+self.inter)

+self.interval]

=self.white

self.figure[-50

-(self.data[j]

-mind)

*500:,

(j)*

(self.interval+self.inter)

:(j)

*(self.interval+self.inter)

+self.interval]

=self.white

indata=self.data[i]

self.data[i]

=self.data[j]

self.data[j]

=indata

self.figure[-50

-(self.data[i]

-mind)

*500:,

(i)*

(self.interval+self.inter)

:(i)

*(self.interval+self.inter)

+self.interval]

=self.black

self.figure[-50

-(self.data[j]

-mind)

*500:,

(j)*

(self.interval+self.inter)

:(j)

*(self.interval+self.inter)

+self.interval]

=self.black

self.visualize(

)def

visualize

(self)

: figure1=self.figure

cv2.namedwindow(

'img'

,cv2.window_normal)

cv2.imshow(

'img'

,figure1)

cv2.waitkey(

1000)

"""

@staticmethod

顏色計算,目前沒用

def getcolor_change(val, total1, total2):

return (120+val*255//(2*total1), 255-val*255//(2*total2), 0)

"""def

sortdata

(self)

:for di in

range

(len

(self.data)):

for dj in

range

(len

(self.data)

-di-1)

: self.choice(dj,dj+1)

if self.data[dj]

>self.data[dj+1]

: self.change(dj,dj+1)

self.getfigure(

)datat=dataseq([7

,9,1

,2,3

,4],

'sort'

) datat.visualize(

)

cv2.destroyallwindows(

)

通過opencv實現視覺化,主要需要注意將排序資料轉換為顯示資料。figure矩陣為乙個畫素矩陣,其中通過多列畫素來表示乙個資料,然後根據資料大小決定該資料列的行數,產生同寬不同高的資料檢視。最終賦予畫素點色彩資訊,完成顯示工作。

python實現排序演算法過程的視覺化

參考github**

使用pygame實現視覺化氣泡排序

視覺化氣泡排序,使用pygame實現動畫演示,很簡單,大概100行多一點,適合向我一樣的新手用於練手的小專案 已經進行了詳細的注釋 環境 python3.7.3 pychram import pygame from random import randint gap 10 豎條的間隔 width 3...

CV2實現人臉檢測

僅僅提供人臉的檢測,不是識別 很簡潔.import cv2,tkinter,os os.environ cuda visible devices 0 可以要求顯示卡提供服務 cap cv2.videocapture 0 while cv2.waitkey 1 97 按a退出,說明下,這裡cv2必須和...

AS2,演算法視覺化 人走迷宮演算法的視覺化實現

as2,演算法視覺化 人走迷宮演算法的視覺化實現 by emilmtthtew 05 10 11 小人在迷宮中尋路是乙個非常經典而有趣的演算法問題,主要用到的堆疊方面的知識還有乙個深度優先搜尋。演算法的細節可以參考我的日誌上的文章 只顯示最正確的搜一條路線的版本 顯示出全部搜尋過程的版本 這裡主要談...