cv2实现冒泡排序可视化

之前在网上看到别人用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=2
        
        if 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
    
    def choice(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代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值