如何使用 OpenCV 交换图像中的蓝色和红色通道

2024-03-21

我在交换图像的通道(特别是红色和蓝色)时遇到了一些问题。我正在使用 Opencv 3.0.0 和 Python 2.7.12。以下是我交换频道的代码

import cv2

img = cv2.imread("input/car1.jpg")

#The obvious approach
Cimg = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

#Manual Approach
red = img[:,:,2]
blue = img[:,:,0]

img[:,:,0] = red
img[:,:,2] = blue

cv2.imshow("frame",Cimg)
cv2.imshow("frame2", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我无法弄清楚为什么相同的图像经过相同(可能)的操作会给出两个不同的输出。有人可以阐明出了什么问题吗?

Original Image The original Image

Manual Operation The manual operation

COLOR_BGR2RGB The cv2.COLOR_BGR2RGB operation


red and blue只是您图像的视图。当你这样做时img[:,:,0] = red这改变了img但是也blue这只是一个视图(基本上只是对子数组的引用img[:,:,0])不是副本,因此您会丢失原始的蓝色通道值。基本上,您认为是临时副本的内容实际上并非如此。添加.copy()它会起作用的。

img = np.arange(27).reshape((3,3,3))

red = img[:,:,2].copy()
blue = img[:,:,0].copy()

img[:,:,0] = red
img[:,:,2] = blue

print("with copy:\n", img)

img = np.arange(27).reshape((3,3,3))

red = img[:,:,2]
blue = img[:,:,0]

img[:,:,0] = red
img[:,:,2] = blue

print("without copy:\n",img)

results:

带副本:

 [[[ 2  1  0]
  [ 5  4  3]
  [ 8  7  6]]

 [[11 10  9]
  [14 13 12]
  [17 16 15]]

 [[20 19 18]
  [23 22 21]
  [26 25 24]]]

没有副本:

 [[[ 2  1  2]
  [ 5  4  5]
  [ 8  7  8]]

 [[11 10 11]
  [14 13 14]
  [17 16 17]]

 [[20 19 20]
  [23 22 23]
  [26 25 26]]]

注意:您实际上只需要 1 个通道的 1 个临时副本。 或者你也可以简单地做img[:,:,::-1]这将再次创建一个视图,但交换通道,img将保持不变,除非您重新分配它:

img = np.arange(27).reshape((3,3,3))

print(img[:,:,::-1])
print(img)
img = img[:,:,::-1]
print(img)

results:

[[[ 2  1  0]
  [ 5  4  3]
  [ 8  7  6]]

 [[11 10  9]
  [14 13 12]
  [17 16 15]]

 [[20 19 18]
  [23 22 21]
  [26 25 24]]]


[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]]

 [[ 9 10 11]
  [12 13 14]
  [15 16 17]]

 [[18 19 20]
  [21 22 23]
  [24 25 26]]]


[[[ 2  1  0]
  [ 5  4  3]
  [ 8  7  6]]

 [[11 10  9]
  [14 13 12]
  [17 16 15]]

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

如何使用 OpenCV 交换图像中的蓝色和红色通道 的相关文章

  • 为神经网络打乱两个 numpy 数组

    我有两个 numpy 数组用于输入数据 X 和输出数据 y X np array 2 3 sample 1 x 16 4 dtype float sample 2 x y np array 1 0 sample 1 y 0 1 dtype
  • Keras ZeroDivisionError:整数除法或以零为模

    我正在尝试使用 Keras 和 Tensorflow 实现卷积神经网络 我有以下代码 from keras models import Sequential from keras layers import Conv2D MaxPoolin
  • 如何在 QTableView 标题中单击鼠标右键单击上下文菜单?

    下面的示例代码 很大程度上受到here http www saltycrane com blog 2007 12 pyqt 43 qtableview qabstracttablemodel 有一个右键单击上下文菜单 当用户单击表中的单元格
  • 高效地将大型 Pandas 数据帧写入磁盘

    我正在尝试找到使用 Python Pandas 高效地将大型数据帧 250MB 写入磁盘或从磁盘写入的最佳方法 我已经尝试了所有方法Python 数据分析 但表现却非常令人失望 这是一个更大项目的一部分 该项目探索将我们当前的分析 数据管理
  • 在 Jupyter Notebook 中设置环境变量的不同方法

    在某些情况下 我在 Windows 10 计算机上使用 Jupyter 笔记本 我想通过设置环境变量 GOOGLE APPLICATION CREDENTIALS 来向 GCP 进行身份验证 我想知道 这两种设置环境变量的方式有什么区别 当
  • 如何在 numpy 数组中查找并保存重复的行?

    我有一个数组 例如 Array 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 1 1 1 2 2 2 我想要输出以下内容的东西 Repeated 1 1 1 2 2 2 保留重复行的数量也可以 例如 Repeated 1 1
  • 从字典中绘制直方图

    我创建了一个dictionary计算 a 中出现的次数list每个键的内容 我现在想绘制其内容的直方图 这是我想要绘制的字典的内容 1 27 34 1 3 72 4 62 5 33 6 36 7 20 8 12 9 9 10 6 11 5
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • Pandas如何按时间段过滤DataFrame

    我有一个包含下表的文件 Name AvailableDate totalRemaining 0 X3321 2018 03 14 13 00 00 200 1 X3321 2018 03 14 14 00 00 200 2 X3321 20
  • 如何将 Pyspark Dataframe 标题设置到另一行?

    我有一个如下所示的数据框 col1 col2 col3 id name val 1 a01 X 2 a02 Y 我需要从中创建一个新的数据框 使用 row 1 作为新的列标题并忽略或删除 col1 col2 等行 新表应如下所示 id na
  • 同一台机器上有多个Python版本?

    Python 网站上是否有关于如何在 Linux 上的同一台计算机上安装和运行多个版本的 Python 的官方文档 我可以找到无数的博客文章和答案 但我想知道是否有 标准 官方方法可以做到这一点 或者这一切都取决于操作系统 我认为它是完全独
  • 一个类似 dict 的 Python 类

    我想编写一个自定义类 其行为类似于dict 所以 我继承自dict 不过 我的问题是 我是否需要创建一个私有的dict我的成员 init 方法 我不明白这个有什么意义 因为我已经有了dict如果我只是继承自的行为dict 谁能指出为什么大多
  • 如何处理 Tkinter 中的窗口关闭事件?

    如何在 Python Tkinter 程序中处理窗口关闭事件 用户单击 X 按钮 Tkinter 支持一种称为协议处理程序 http web archive org web 20201111215134 http effbot org tk
  • Python matplotlib:将轴标签/图例从粗体更改为常规粗细

    我正在尝试制作一些出版质量的图 但遇到了一个小问题 默认情况下 matplotlib 轴标签和图例条目的权重似乎比轴刻度线重 是否有办法强制轴标签 图例条目与刻度线的重量相同 import matplotlib pyplot as plt
  • 在 anaconda 环境下运行 qsub

    我有一个程序 通常在 Linux 的 conda 环境中运行 因为我用它来管理我的库 指令如下 source activate my environment python hello world py 我怎样才能跑你好世界 py在与 PBS
  • 在不同的 GPU 上同时训练多个 keras/tensorflow 模型

    我想在 Jupyter Notebook 中同时在多个 GPU 上训练多个模型 我正在使用 4GPU 的节点上工作 我想将一个 GPU 分配给一个模型并同时训练 4 个不同的模型 现在 我通过 例如 为一台笔记本选择 GPU import
  • 避免“散点/点/蜂群”图中的数据点重叠

    使用绘制点图时matplotlib 我想偏移重叠的数据点以使它们全部可见 例如 如果我有 CategoryA 0 0 3 0 5 CategoryB 5 10 5 5 10 我想要每一个CategoryA 0 数据点并排设置 而不是彼此重叠
  • 使用 Numpy 进行多维批量图像卷积

    在图像处理和分类网络中 一个常见的任务是输入图像与一些固定滤波器的卷积或互相关 例如 在卷积神经网络 CNN 中 这是一种极其常见的操作 我已将通用版本任务减少为 Given 一批 N 个图像 N H W D 和一组 K 个滤镜 K H W
  • 在 python 中使用高精度时间戳

    嘿 我正在使用 python 处理日期时间 我想知道解析这个时间戳的最佳方法是什么 时间戳是ISO标准 这里是一个例子 2010 06 19T08 17 14 078685237Z 现在到目前为止我已经使用过 time datetime d
  • 正则表达式 - 匹配不包含字符串的模式

    我对正则表达式很陌生 并且一直在寻找方法来做到这一点 但没有成功 给定一个字符串 我想删除以 abc 开头 以 abc 结尾且中间不包含 abc 的任何模式 如果我做 abc abc abc 它将匹配以 b 开头 以 abc 结尾并且中间包

随机推荐

  • 当我没有使用任何广告服务时,应用程序因“IDFA 不正确”而被拒绝

    I use 谷歌分析在我的应用程序中 所以它需要广告支持框架 从昨天开始 当我尝试发布更新时 我的应用程序被拒绝 并显示以下错误消息 亲爱的开发者 我们发现您最近的交货存在一个或多个问题 Zee新闻英语 为了处理您的交货 需要解决以下问题
  • 在 pdf 中添加撤销详细信息,同时签名

    我已经使用 PC 上附加的数字令牌对 pdf 进行了数字签名 使用库 itext Sharp 附加相同的内容 当我在 adobe reader 中打开相同内容时 它显示无法执行撤销 当我看到详细信息时 它显示颁发者证书之一被撤销未检查错误
  • 仅包含数据框中每列的异常值

    我有一个数据框如下 chr leftPos TBGGT 12 try 324Gtt AMN2 1 24352 34 43 19 43 1 53534 2 1 1 9 2 34 15 7 9 18 3 3443 100 4 4 9 3 344
  • 卡夫卡领导者选举什么时候发生?

    Kafka High Level Producer 何时以及多久选举一次领导者 它是在发送每条消息之前执行还是仅在创建连接时执行一次 每个代理都有有关主题 和分区 及其领导者列表的信息 每当新领导者当选或分区数量发生变化时 动物园管理员都会
  • Keras 1.0:获取中间层输出

    我目前正在尝试可视化 Keras 1 0 中中间层的输出 我可以使用 Keras 0 3 实现 但它不再起作用了 x model input y model layers 3 output f theano function x y 但我收
  • 滚动到 div 中的某个元素

    我有一个绝对定位的 div 它充当页面中心的模式窗口 模式窗口可垂直滚动 右侧有一个滚动条 页面本身也可以垂直滚动 右侧有一个滚动条 我希望能够单击链接并使模式窗口滚动到链接的项目 我几乎可以使用 target scrollIntoView
  • 检查后在 Gradle 插件中运行任务

    我在 Groovy 下编写了一个 Gradle 插件buildSrc as package test import org gradle api Plugin import org gradle api Project class Samp
  • Java 精确计算 - 使用选项

    我试图对 JAVA SQL 中精确计算的选项进行一些简洁的概述 到目前为止 我找到了以下选项 使用双打 接受他们的缺点 不行 use BigDecimals 在复杂的公式中使用它们对我来说是有问题的 use String format De
  • 将函数应用于列表中所有数据帧的某些列,然后为列赋值

    类似问题已回答here https stackoverflow com questions 22002838 same function over multiple data frames in r 我有一个数据框列表 即 1000 如下所
  • 增强 qi::rule 上的精神语义动作

    我一直在阅读语义动作 我有一个如下所示的规则 property rule identifier rule gt gt lit L gt gt type specification rule gt gt lit L gt gt alnum g
  • Emacs:如何将杀戮环从系统剪贴板中分离出来?

    默认情况下 Emacs 23 x 似乎会将被删除的内容复制到删除环和系统剪贴板 是否可以将杀戮环和剪贴板分开 例如 ctrl k 将内容放入终止环 cmd x 将内容放入系统剪贴板并保留终止环 这在中讨论过这个线程 http lists g
  • 如何在每个测试方法之前和之后执行sql脚本

    有一个 Sqlspring中的注释允许执行sql测试方法前后的代码 Test Sql init sql Sql scripts clean sql executionPhase Sql ExecutionPhase AFTER TEST M
  • 与 Kotlin 泛型的混淆

    我是 Kotlin 的新手 我正在尝试编写一些相当简单的代码 但是我不知道如何使用泛型来使其工作 我有一个Handler代表事物处理程序的特征 我无法更改处理程序的代码 因为它来自库 trait Handler
  • 当我构建多个 ProductFlavors 时,使用 Facebook SDK INSTALL_FAILED_CONFLICTING_PROVIDER

    我正在构建一个包含多个 Android 应用程序productFlavors 并使用Facebook SDK v4 1进行登录和分享内容 问题是 当我尝试在已安装相同应用程序 但风格不同 的设备上安装应用程序时 会引发错误 它不允许我安装第
  • 如何向 Quill.js 添加新格式(
    标签)?

    我想添加一个按钮来添加 hr 标记到quill js 测试版 http beta quilljs com docs quickstart editor 这里的fiddle https jsfiddle net Lgxkj4ag div sp
  • 如何多次发送文件

    有两个 C 项目 一个项目用于客户端 另一个项目用于服务器 第一步是运行服务器 然后选择一个目标文件夹 然后运行客户端项目 选择一些text txt发送到服务器的目标文件夹 只有客户端可以向服务器发送文件 Demo 1 choosing f
  • 为什么有些资源文件放在META-INF目录下

    我想知道为什么有些资源文件放在JAR中的META INF目录下 我总是将像 test properties 这样的资源放在根目录下 将它们放入 META INF 有什么好处吗 许多 Java EE API 都有一个约定 即当您将特定的配置
  • iText,Font、BaseFont 和 createFont() 发生了什么?

    关于 font 和 basefont 的情况对我来说有很多谜团 尤其是当涉及到构造函数时 iText 网站提供了这一行作为新字体的示例代码 BaseFont unicode BaseFont createFont c windows fon
  • Rails 4 - 如何使用枚举?

    我正在尝试在 Rails 4 上制作一个应用程序 我发布了这个问题并得到了一些建议 Rails 4 Simple Form 如何保存键和显示值 https stackoverflow com questions 36539924 rails
  • 如何使用 OpenCV 交换图像中的蓝色和红色通道

    我在交换图像的通道 特别是红色和蓝色 时遇到了一些问题 我正在使用 Opencv 3 0 0 和 Python 2 7 12 以下是我交换频道的代码 import cv2 img cv2 imread input car1 jpg The