首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python3:我试图通过使用np.array遍历所有像素来查找图像中的所有绿色像素,但无法避免索引错误。

Python3:我试图通过使用np.array遍历所有像素来查找图像中的所有绿色像素,但无法避免索引错误。
EN

Stack Overflow用户
提问于 2018-09-04 23:48:20
回答 1查看 6.4K关注 0票数 4

我的代码目前包括加载映像,这是成功的,我不认为与问题有任何联系。

然后,我继续将彩色图像转换为一个名为rgb的np.array。

代码语言:javascript
运行
AI代码解释
复制
    # convert image into array
    rgb = np.array(img)
    red = rgb[:,:,0]
    green = rgb[:,:,1]
    blue = rgb[:,:,2]

为了再次检查我对这个数组的理解,万一这可能是问题的根源,它是一个数组,它的rgbx-坐标,y-坐标,颜色带,它的值在0-255之间,无论是红色,绿色还是蓝色。

然后,我的想法是做一个嵌套的for循环,遍历图像的所有像素(620 in,400 in),并根据绿色与蓝色和红色的比例对它们进行排序,试图选择更绿色的像素,并将所有其他像素设置为黑色或0。

代码语言:javascript
运行
AI代码解释
复制
for i in range(xsize):
for j in range(ysize):
    color = rgb[i,j]  <-- Index error occurs here
    if(color[0] > 128):
        if(color[1] < 128):
            if(color[2] > 128):
                rgb[i,j] = [0,0,0]

我在尝试运行时所收到的错误如下所示:

IndexError:对于尺寸为400的0轴,索引400超出了界限

我认为这可能与我给i和j的界有关,所以我只试着对图像的一小部分内部进行排序,但仍然得到了相同的错误。在这一点上,我不知道什么甚至是错误的根源,更不用说解决方案了。

EN

回答 1

Stack Overflow用户

发布于 2018-09-05 03:09:00

为了直接回答您的问题,首先在y数组中给出numpy轴,然后给出x轴,因此交换索引。

更直接地说,您会发现for循环在Python中非常慢,您通常最好使用numpy矢量化操作。另外,您还会发现在HSV色彩空间中更容易找到绿色的阴影。

让我们从HSL色轮开始:

假设你想把所有的绿色变成黑色。因此,在维基百科页面中,绿色对应的颜色是120度,这意味着你可以这样做:

代码语言:javascript
运行
AI代码解释
复制
#!/usr/local/bin/python3
import numpy as np
from PIL import Image

# Open image and make RGB and HSV versions
RGBim = Image.open("image.png").convert('RGB')
HSVim = RGBim.convert('HSV')

# Make numpy versions
RGBna = np.array(RGBim)
HSVna = np.array(HSVim)

# Extract Hue
H = HSVna[:,:,0]

# Find all green pixels, i.e. where 100 < Hue < 140
lo,hi = 100,140
# Rescale to 0-255, rather than 0-360 because we are using uint8
lo = int((lo * 255) / 360)
hi = int((hi * 255) / 360)
green = np.where((H>lo) & (H<hi))

# Make all green pixels black in original image
RGBna[green] = [0,0,0]

count = green[0].size
print("Pixels matched: {}".format(count))
Image.fromarray(RGBna).save('result.png')

这意味着:

下面是一个稍微改进的版本,它保留alpha/透明性,并匹配红色像素以获得额外的乐趣:

代码语言:javascript
运行
AI代码解释
复制
#!/usr/local/bin/python3
import numpy as np
from PIL import Image

# Open image and make RGB and HSV versions
im = Image.open("image.png")

# Save Alpha if present, then remove
if 'A' in im.getbands():
    savedAlpha = im.getchannel('A')
    im = im.convert('RGB')

# Make HSV version
HSVim = im.convert('HSV')

# Make numpy versions
RGBna = np.array(im)
HSVna = np.array(HSVim)

# Extract Hue
H = HSVna[:,:,0]

# Find all red pixels, i.e. where 340 < Hue < 20
lo,hi =  340,20
# Rescale to 0-255, rather than 0-360 because we are using uint8
lo = int((lo * 255) / 360)
hi = int((hi * 255) / 360)
red = np.where((H>lo) | (H<hi))

# Make all red pixels black in original image
RGBna[red] = [0,0,0]

count = red[0].size
print("Pixels matched: {}".format(count))

result=Image.fromarray(RGBna)

# Replace Alpha if originally present
if savedAlpha is not None:
    result.putalpha(savedAlpha)

result.save('result.png')

关键词:图像处理,PIL,枕头,色度饱和值,HSV,HSL,颜色范围,颜色范围,范围,质数。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52179821

复制
相关文章
如何使用Docker Compose在容器内运行Linux命令?
Docker Compose 是一个用于定义和运行多容器Docker应用程序的工具。除了可以启动应用程序的多个容器之外,Docker Compose还提供了一种在容器内部执行命令的方式。在本文中,我们将详细介绍如何使用Docker Compose在容器内运行Linux命令,并展示一些常见的应用场景。
网络技术联盟站
2023/06/08
3.2K0
如何使用Docker Compose在容器内运行Linux命令?
ClickHouse 如何查询指定时间段内导入的数据
实现ClickHouse 全量和增量的导入和ClickHouse 和迁移ClickHouse
jasong
2021/08/24
5.5K0
ClickHouse 如何查询指定时间段内导入的数据
Oceanus 在腾讯微视数据的实践-统计某时间段内的uv、pv
在实时计算中,经常会遇到需要计算某个时间段内的pv、uv这类需求,完成该类需求有多种方式,本文以微视数据端内计算启动数据的pv、uv为应用场景,来介绍常用的两种实现方式。
吴云涛
2021/10/15
1.9K0
Oceanus 在腾讯微视数据的实践-统计某时间段内的uv、pv
Yarn运行中的任务如何终止?
我们的作业是使用yarn来调度的,那么肯定就需要使用相关的命令来进行管理,简单的有查询任务列表和killed某一个正在运行中的任务。
大数据真好玩
2021/03/30
7.5K0
Yarn运行中的任务如何终止?
ParallelX在GPU上运行Hadoop任务
在面对大规模计算密集型算法时,MapReduce范式的表现并不总是很理想。为了解决其瓶颈,一支小型创业团队构建了名为ParallelX的产品——它将通过利用GPU的运算能力,为Hadoop任务带来显著的提升。 ParallelX的联合创始人Tony Diepenbrock表示,这是一个“GPU编译器,它能够把用户使用Java编写的代码转化为OpenCL,并在亚马逊AWS GPU云上运行”。它的最终产品是一项与亚马逊Elastic MapReduce类似的服务,只不过不同之处在于它将利用EC2 GPU实例类型
GPUS Lady
2018/03/30
1.2K0
.Net Core in Docker - 在容器内编译发布并运行
Docker可以说是现在微服务,DevOps的基础,咱们.Net Core自然也得上Docker。.Net Core发布到Docker容器的教程网上也有不少,但是今天还是想来写一写。 你搜.Net core程序发布到Docker网上一般常见的有两种方案:
MJ.Zhou
2019/07/02
2K0
C#判断一个给定的IP地址是否在指定的范围内
比如给定一个ip段:127.0.0.1 ~ 127.0.0.255,我们想判断一个给定的ip地址是否在此段内,可以先将ip地址转换成整数,然后整数比较大小就很容易了。 例如: 127.0.0.1 = 2130706433 127.0.0.255 = 2130706687 判断: 127.0.1.253 = 2130706941 是否在此范围内,直接比较整数大小即可 将ip地址转换成整数
用户7108768
2021/11/03
1.4K0
ThinkPHP5 (mySQL) 统计各个时间段内的订单量
背景 今天在进行后台数据监控时; 需要对一天24小时的下单量进行时间段的统计; 但是下单时间字段 pay_time 选取的是 timestamp 类型; 此时需要进行时间段的数据分组剥离,在此做一下实现方式,请多指教 … 环境 框架:ThinkPHP5.1.2 系统:nginx/win10 、phpStudy2017 实现方式 1. 首先,考虑到使用的是 group分组技巧; 那么就必须要将 pay_time 中记录的字段数据进行 24时的定位切分; 这里可以用到 substrin
泥豆芽儿 MT
2020/01/13
2.1K0
ThinkPHP5 (mySQL) 统计各个时间段内的订单量
python|输出给定范围内的顺次数
我们定义「顺次数」为:每一位上的数字都比前一位上的数字大 1 的整数。 请你返回由 [low, high] 范围内所有顺次数组成的有序 列表(从小到大排序)
算法与编程之美
2020/02/21
8000
在 Vue 对象模块内如何使用 this 对象?
众所周知,js 中的 this 对象在不同作用域下指代不同的对象实例,并且在以下 4 种场景中经常会“不知所向”:
LIYI
2019/09/02
2.8K0
单路径NAS: 在四小时内设计出给定硬件内最有效的网
这篇paper[Single-Path NAS: Designing Hardware-Efficient ConvNets in less than 4 Hours]是2019年4月在arxiv上的新文章,来自CMU、微软和哈工大,论文提出了Single-Path NAS,将搜索时间从200 GPU时降低至4 GPU时,同时在ImageNet上达到了74.96% top-1的准确率。
小白学视觉
2022/09/28
3970
防火墙(9)——禁止某个时间段内访问我们的web
首先我们要准备一台linux虚拟机。 随后我们要在我们的虚拟机上安装apache服务:yum install httpd -y 随后可以curl以下我们的主机看是否能够访问:
gzq大数据
2020/11/11
1.2K0
防火墙(9)——禁止某个时间段内访问我们的web
YARN任务运行中的Token
上一篇文章中,主要讲解了token的一些通用知识,以及hadoop中,token的实现和通用数据结构及流程。
陈猿解码
2023/02/28
8870
YARN任务运行中的Token
Hadoop 任务运行失败
任务运行失败最常见的情况是 map 任务或 reduce 任务中的用户代码抛出运行异常。如果发生这种情况,任务 JVM 会在退出之前向其父 application master 发送错误报错。错误报告最后被记入用户日志中。application master 会将此次任务尝试标记为 failed (失败),并释放容器以便资源可以为其他任务使用。
smartsi
2019/08/07
3K0
用oozie命令行的方式在yarn上运行spark任务
本文介绍了如何使用oozie命令行的方式在yarn上运行spark任务,包括准备环境、上传jar包、配置job.properties和workflow.xml文件、执行命令、查看oozie和yarn的界面、查看yarn的日志文件等步骤。
用户1171305
2017/12/28
2.4K0
用oozie命令行的方式在yarn上运行spark任务
Python定时计划任务探究,如何实现到点运行py任务脚本
不少大佬哥应该有着这样一个应用场景,即到点跪舔女神,给女大佬问好,带早餐,备胎计划??而在实际网络中,也有着不少定时定点计划任务需要运行,这在运维当中非常常见,也非常重要!身为技术渣想要实现到点运行py任务脚本,比如说每天某个时间点准时运行爬取91新片以及精彩评论,兴趣让渣渣有研究的动力,这就有了下面这篇水文!!
二爷
2021/10/11
2.1K0
点击加载更多

相似问题

如何使用ScheduledExecutorService在特定时间段内运行任务?

144

使用datetime运行给定时间段内的事件计数

20

如何在给定的时间段内运行线程,然后在Java中返回?

10

检索给定时间段内的数据

05

比较给定时间段内的日期

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档