使用图像可视化排序算法

在本周的博客中,我认为我会做一些事情来帮助我学习更多有关算法的知识,并为编写采访面试做准备。 但是,以我的典型方式,我认为我会尝试使其形象化以做一些不同的事情,以使此有趣的内容读起来并对其进行尝试。 因此,让我们开始吧。

Partitioning the image

起初,我认为使用P5将图像划分为不同的像素,然后将这些图像随机排列以放置在图像的不同区域会很有趣。 但是,事实证明,JavaScript中的P5库和Java中的处理是通过两种不同的方式处理像素的。 Java,当使用loadPixels()函数时,将返回一个数组,该数组包含所有像素作为该数组中的单个元素,其中每个像素在整个图像上从左到右逐行读取。

现在在javascript中不是这种情况。 P5实际上会给您一个像素数组,其中每个像素实际上会分成该数组中的三个不同元素。 数组的元素实际上是第一个图像像素中的红色量,第​​二个元素是绿色的量,第三个元素是蓝色的量。

因此,与其将一个像素精确地映射到像素阵列的单个元素中,不如将每个单个像素拆分为阵列上的三个元素,每个元素代表各自的rgb值。

这使得交换像素和遍历像素数组比处理对象复杂得多。 同样,考虑到像素数量通常在数百或数千中,对该数组进行排序实际上会增加计算负担,并且观看时没有那么大的指导意义。

因此,我决定根据图像的任意块进行分区更适合该任务。 这里的问题是图像必须在x和y方向上根据指定的量进行分割。 在P5中看起来像:

const sketch = (p) => {
      
    let img, loc, array = [], amountX = 30, amountY = 30;
    let blockWidth, blockHeight;

...

p.setup = () => {
      
        img.resize(img.width - img.width % amountX, img.height - img.height % amountY)
        blockWidth = img.width / amountX
        blockHeight = img.height / amountY

        ...

    } 

p.partition = (img) => {
      
        let array = []
        let newBlock
        for (let j = 0; j < amountY; j++) {
      
            for (let i = 0; i < amountX; i++) {
      
                newBlock = img.get(i * blockWidth, j * blockHeight, blockWidth, blockHeight)
                array.push({
      img: newBlock, index: i 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值