如何避免使用 opencv 和 numpy 逐像素循环图像

2023-12-07

我逐个像素地循环浏览该图像,速度非常慢。我有 2 个图像,我正在比较切片和展平,因此每个元素都是一个名为 3 维 rgb 值e1 and e2。虽然它很慢。有没有一些方法使用opencv or numpy这可以加快速度吗?

我在这里所做的是对具有分级颜色(8 种颜色)的图像进行像素比较。
我正在读取 jpeg,所以应该是什么[255,0,0]变成[230,12,11]所以呢clean_key所做的是将值阈值设置为更干净的值。然后我将这个组合出现的次数附加到字典中。例如dict["255,0,0 0,0,255"]在此图像中可能出现 300 次,这意味着有 300 个实例im1有一个红色像素并且im2有一个蓝色像素。

for e1,e2 in itertools.izip(im1_slice.reshape(-1,3),im2_slice.reshape(-1,3)):
      key = str(clean_key(e1_row)) + str(clean_key(e2_row))
      if key in proportion_dict:
        proportion_dict[key] += 1
      else:
        proportion_dict[key] = 1           

return (proportion_dict,total)

您想要执行此操作的方法是首先将每个图像与您想要在该图像中看到的颜色进行比较,这会生成一个布尔蒙版,其中该图像是给定的颜色。您不需要展平图像来执行此操作。这可以通过说:

image == color

这对于灰度图像来说效果很好,但是如果color实际上是沿着第三个维度,您想要确保沿着该维度的所有内容都匹配(即,您希望所有 r、g 和 b 分量匹配,因此您使用np.all沿着最后一个轴(-1给出最后一个轴):

np.all(image == color, axis=-1)

它给出了一个二维布尔数组,其中每个元素是True如果该像素匹配color and False如果不。对两个图像(以及两种颜色)执行此操作,然后您将得到一个颜色匹配的蒙版both images:

np.all(im1==c1, -1) & np.all(im2==c2, -1)

这不仅告诉您有多少像素匹配,还告诉您它们的位置(您可以绘制上面的线并在它们匹配的点处看到点)。如果您只想计数,只需使用np.sum在重要的面具上True as 1, and False as 0。全部一起:

def compare_colors(im1, im2, c1, c2):
    matches = np.all(im1==c1, -1) & np.all(im2==c2, -1)
    return matches.sum()

并使用随机数据来使用/测试它:

>>> a = np.random.choice([0, 255], (20,20,3))
>>> b = np.random.choice([0, 255], (20,20,3))
>>> compare_colors(a, b, [255, 0, 255], [0, 255, 0])
12

但在此之前,根据您的真实输入,您需要按阈值“清理”颜色。你可以轻松做到这一点np.where它查看数组的每个元素,如果满足条件,则给出一个值,如果不满足,则给出另一个值。这里,如果该值小于128, 它用0,否则使用255:

np.where(a<128, 0, 255)

一般来说,您可以编写这样的函数,并使用上面的值作为默认值:

def clean(a, thresh=128, under=0, over=255):
    return np.where(a<128, under, over)

当然,要建立计数字典,您仍然必须循环遍历每种颜色组合,但这是一个很短的循环(8*8)。这是完整的运行过程:

# some fake data (has values between 0 and 255 for r, g, and b)
H, W = 20, 20
a = np.random.randint(0, 256, (H,W,3))
b = np.random.randint(0, 256, (H,W,3))

# clean the images:
ac = clean(a)
bc = clean(b)

# build a list of all pairs of all 8 colors using itertools.product:
col_combos = itertools.product(itertools.product((0,255), repeat=3), repeat=2)

# now apply the comparison to the images for each pair of colors
col_dict = { (c1,c2): compare_colors(ac, bc, c1, c2) for c1,c2 in col_combos }

然后,键为col_dict在我看来,实际上是元组的元组,它们比字符串更容易处理。以下是访问示例密钥的方法:

>>> col_dict[((0, 255, 255), (255, 0, 255))]
8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免使用 opencv 和 numpy 逐像素循环图像 的相关文章

  • 使用 OpenCV 描述符与 findFundamentalMat 匹配

    我之前发布了有关同一程序的问题 但没有收到答案 我已经纠正了当时遇到的问题 但又面临新的问题 基本上 我使用未校准的方法自动校正立体图像对的旋转和平移 我使用 SURF 等特征检测算法来查找两个图像 左右立体图像对 中的点 然后再次使用 S
  • python - 是否可以扩展 xml-rpc 可以序列化的事物集?

    我看到几个问题询问如何发送numpy ndarray通过 xml rpc 调用 这不能开箱即用 因为正如 xml rpc 中所述docs https docs python org 2 library xmlrpclib html 有一组固
  • OpenCV InRange 参数

    我在 Android 上使用 OpenCV 来实时查找特定颜色的圆圈 我的第一步是仅保留与我正在寻找的定义颜色相对应的像素 在本例中为红色或绿色 示例图像 https i stack imgur com CIozU jpg 为此 我正在使用
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • 如果字段值在外部列表中,Django 会注释布尔值

    想象一下我有这个 Django 模型 class Letter models Model name models CharField max length 1 unique True 还有这个列表 vowels a e i o u 我想查询
  • 定义函数后对其进行修饰?

    I think答案是否定的 但我似乎找不到明确的说法 我有以下情况 def decorated function function functools wraps function def my function print Hello s
  • 如何使用 python urllib 在 HTTP/1.1 中保持活力

    现在我正在这样做 Python3 urllib url someurl headers HOST somehost Connection keep alive Accept Encoding gzip deflate opener urll
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • 在径向(树)网络x图中查找末端节点(叶节点)

    给定下图 是否有一种方便的方法来仅获取末端节点 我所说的端节点是指那些具有一个连接边的到节点 我认为这些有时被称为叶节点 G nx DiGraph fromnodes 0 1 1 1 1 1 2 3 4 5 5 5 7 8 9 10 ton
  • 如何使用Python的super()来更新父值?

    我对继承很陌生 之前所有关于继承和 Python 的 super 函数的讨论都有点超出我的理解 我当前使用以下代码来更新父对象的值 usr bin env python test py class Master object mydata
  • 如何列出 python PDB 中的当前行?

    在 perl 调试器中 如果重复列出离开当前行的代码段 可以通过输入命令返回到当前行 点 我无法使用 python PDB 模块找到任何类似的东西 如果我list如果我自己离开当前行并想再次查看它 似乎我必须记住当前正在执行的行号 对我来说
  • Django 在选择列表更改时创建毫无意义的迁移

    我正在尝试使用可调用创建一个带有选择字段的模型 以便 Django 在选择列表更改时不会创建迁移 如中所述this https stackoverflow com questions 31788450 stop django from cr
  • conda-env list / conda info --envs 如何查找环境?

    我一直在尝试 anaconda miniconda 因为我的用户使用随 miniconda 安装的结构生物学程序 并且作者都没有 A 考虑到可能存在其他 miniconda 应用程序 B 他们的程序将在多用户环境中使用 因此 使用 Arch
  • Matplotlib Scatter - ValueError:RGBA 序列的长度应为 3 或 4

    我正在尝试为我的功能绘制图表 但不断收到此错误 ValueError RGBA sequence should have length 3 or 4 每当我只有 6 种形状时 代码就可以完美运行 但现在我将其增加到 10 种 它就不起作用了
  • 查找给定节点的最高权重边

    我在 NetworkX 中有一个有向图 边缘的权重从 0 到 1 表示它们发生的概率 网络连通性非常高 所以我想修剪每个节点的边缘 只保留最高概率的节点 我不确定如何迭代每个节点并仅保留最高权重in edges在图中 有没有一个networ
  • Scipy 稀疏 Cumsum

    假设我有一个scipy sparse csr matrix代表下面的值 0 0 1 2 0 3 0 4 1 0 0 2 0 3 4 0 我想就地计算非零值的累积和 这会将数组更改为 0 0 1 3 0 6 0 10 1 0 0 3 0 6
  • Python - 如何查询定义方法的类?

    我的问题有点类似于this one https stackoverflow com questions 5520580 how do you get all classes defined in a module but not impor
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 如何禁止 celery 中的 pickle 序列化

    Celery 默认使用 pickle 作为任务的序列化方法 如中所述FAQ http ask github com celery faq html isn t using pickle a security concern 这代表一个安全漏
  • 如何将列表字典写入字符串而不是 CSV 文件?

    This 堆栈溢出问题 https stackoverflow com questions 37997085 how to write a dictionary of lists to a csv file将列表字典写入 CSV 文件的答案

随机推荐

  • 当第一个参数是变量时,使用 new URL() 创建相对 URL 的行为会有所不同。为什么?

    我正在尝试在 NextJs 中实现网络工作者 我遵循了他们的example但我无法将工作人员相对 URL 作为变量传递给new URL url baseUrl 以下代码片段是调用工作者的地方 import useEffect useRef
  • Python时间延迟

    好吧 我想知道如何延迟程序的一部分而不暂停整个程序 我不一定擅长Python 所以如果可能的话 如果你能给我一个相对简单的答案 那就太好了 我想让乌龟在每次调用此函数时在屏幕上画一个圆圈 这就是我所拥有的 import time from
  • 检查字符串中是否存在数组元素

    我认为这对于本地 php 函数来说是一件简单的事情 但我发现了一些不同的 非常复杂的人们试图实现它的方法 检查字符串是否包含数组中的一个或多个元素的最有效方法是什么 即 下面 其中 data description 是一个字符串 观察下面的
  • 尝试调整 RichTextBox 中的图像大小时光标闪烁

    我希望这是一个简单的问题 我执行以下操作 在VS2010中 我创建一个Windows窗体应用程序 从工具箱中 将 RichTextBox 控件拖到窗体中 将窗体和 RichTextBox 控件调整为足够大以显示小图片 运行 开始调试 从 W
  • 更新chrome(35.0.1916.114 m)后,webkitNotifications不起作用

    我的chrome浏览器版本是35 0 1916 114 m 更新后 window webkitNotifications 对象未定义 为什么 请帮我 chrome webkit api 被替换 https groups google com
  • 追查Spring“不符合自动代理资格”的原因

    当你开始摆弄 Spring 的自动代理功能时 你经常会遇到这种行为 如下所示 实现的类 BeanPostProcessor接口有 特殊 所以他们受到待遇 因容器而异 全部 BeanPostProcessors 及其直接 引用的bean将被实
  • spring security:为什么我们无法访问 @PreAuthorize 中的 Hibernate 实体参数?

    我正在应用以下接口方法 PreAuthorize PreAuthorize doSomething user id void something User user List
  • Rust 测试甚至无法运行

    我正在编写一个项目来学习如何使用 Rust 我正在调用我的项目未来金融实验室 编写一些基本功能并验证可以构建应用程序后 我想包括一些测试 位于aggregates mod rs 根据文档 测试与实际代码位于同一文件中 尽管遵循了 但我无法运
  • 如何在 RDP 期间访问远程 USB 智能卡

    我的设置 RDP 客户端 Win7 RDP gt 远程带智能卡的服务器 Win2k8R2 我发现无数的答案表明这是不可能的 很多答案表明 RDP 是为了安全性而设计的 智能卡被锁定 在使用远程桌面连接 RDP 进行远程连接时不允许看到设备
  • 我可以设置从 jar 文件运行的 Java 最大堆大小吗?

    我正在启动一个 java jar 文件 该文件通常需要超过默认的 64MB 最大堆大小 不过 256MB 的堆大小对于这个应用程序来说已经足够了 无论如何 是否要指定 也许在清单中 在启动 jar 时始终使用 256MB 最大堆大小 如果需
  • 如何删除文件夹中除只读文件之外的所有文件?

    我想删除文件夹中除只读文件之外的所有文件和子文件夹 如何使用 powershell 来做到这一点 作为参考 这在 V3 中更容易一些 Get ChildItem Attributes r Remove Item Recurse Force
  • python 中字典列表的奇怪行为

    这是对列表执行操作的简单代码 gt gt gt a 0 5 gt gt gt a 0 0 0 0 0 gt gt gt a 0 5 gt gt gt a 5 0 0 0 0 gt gt gt 目前来看 没有什么异常 现在 我尝试对字典列表而
  • java.lang.ClassNotFoundException:org.springframework.http.converter.json.MappingJackson2HttpMessageConverter

    我在我的项目中使用 spring 集成 当我在 jetty 容器中部署应用程序时 出现以下异常 org springframework beans factory BeanCreationException Error creating b
  • jquery中传递变量

    将 var full 传递给函数 b 的最佳方法是什么 我不想使用全局变量 退货是唯一的选择 p p p class aaa p p p
  • 如何使android中的锚标记可点击

    这是我的代码 TextView aboutL1 TextView findViewById R id aboutL2 aboutL1 setText Html fromHtml This app is open source br The
  • 流改造意外结束

    我有一个 Android 应用程序 它向 Flask 中的 REST API 发出 http 请求 我使用 Retrofit2 和 okhttp3 向带有 Raspbian Lite 的 Raspberry Pi 上托管的服务器发出请求 我
  • 从 JAX-RS servlet 动态创建图像

    是否可以创建 PNG 图像并将其作为 JAX RS 资源的一部分直接输出到浏览器 像这样的东西 Path img externalId Stateless Produces image png public class MyImgResou
  • Apache POI、Excel 2007+ XML 和 OSGI

    对于一个项目 我尝试使用 Apache POI 来获取 Excel XML 功能以与 OSGI 配合使用 我尝试过 POI ServiceMix 捆绑包 但缺少 ooxml schemas jar 将 jar 添加到捆绑包并将其包含在清单中
  • 如何使用CSS动画创建如图所示的立方体开口?

    在我的项目中 当打开主页时 它应该运行 CSS 动画 以便立方体的面打开 动画完成后 脸部应该如图所示 我需要有一个结果就像第一次打开一样图片中 这是我的代码 sk folding cube margin 20px auto width 4
  • 如何避免使用 opencv 和 numpy 逐像素循环图像

    我逐个像素地循环浏览该图像 速度非常慢 我有 2 个图像 我正在比较切片和展平 因此每个元素都是一个名为 3 维 rgb 值e1 and e2 虽然它很慢 有没有一些方法使用opencv or numpy这可以加快速度吗 我在这里所做的是对