之前在網上看到別人用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 小人在迷宮中尋路是乙個非常經典而有趣的演算法問題,主要用到的堆疊方面的知識還有乙個深度優先搜尋。演算法的細節可以參考我的日誌上的文章 只顯示最正確的搜一條路線的版本 顯示出全部搜尋過程的版本 這裡主要談...