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

肖瓦特·维尔玛(Shashwat Verma)

在交换图像的通道(特别是红色和蓝色)时,我面临一些问题。我正在使用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()

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

原始图片 原始图片

手动操作 手动操作

COLOR_BGR2RGB cv2.COLOR_BGR2RGB操作

朱利安

redblue是你的形象只是意见。当您进行img[:,:,0] = red此更改时imgblue它也只是视图(基本上只是对子数组的引用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)

结果:

附副本:

 [[[ 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)

结果:

[[[ 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]]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

看起来opencv交换了蓝色和红色通道?

来自分类Dev

如何使用misc.imread将图像切成红色,绿色和蓝色通道

来自分类Dev

从位图到位图源的转换过程中交换了蓝色和红色通道

来自分类Dev

从位图到位图源的转换过程中交换了蓝色和红色通道

来自分类Dev

如何在RGB图像中将红色与蓝色交换并保持亮度?

来自分类Dev

如何在javascript中交换图像

来自分类Dev

如何更改/交换图像中的颜色?

来自分类Dev

在YouTube上交换红色和蓝色

来自分类Dev

使用Python和OpenCV查找图像中的红色

来自分类Dev

使用JavaScript交换图像

来自分类Dev

如何使用Jquery和.fadeIn效果在悬停时交换图像?

来自分类Dev

如何使用Java或Processing从图像中仅检测单色,例如红色,蓝色或绿色?

来自分类Dev

如何使此交换图像代码在Wordpress中工作

来自分类Dev

如何在GridView中交换图像(Android)

来自分类Dev

如何在样式组件中交换图像URL?

来自分类Dev

如何在bash /控制台中使用ImageMagick从图像中删除蓝色通道?

来自分类Dev

如何在OpenCV中将灰度图像复制到RGB图像红色通道?

来自分类Dev

在ffmpeg渲染的视频中交换了红色和绿色通道

来自分类Dev

如何随机交换图像的像素?

来自分类Dev

使用jQuery标签交换图像

来自分类Dev

使用JS HTML和CSS在“夜间”在任何时区交换图像吗?

来自分类Dev

使用JS HTML和CSS在“夜间”在任何时区交换图像吗?

来自分类Dev

分解图像(红色通道)

来自分类Dev

如何将鼠标悬停在单独的div中交换图像和文本?

来自分类Dev

为什么图像的红色,绿色,蓝色通道分别是灰度的(Matlab)?

来自分类Dev

转换图像颜色通道?

来自分类Dev

在Matlab中交换图像中的圆形像素

来自分类Dev

如何交换图片

Related 相关文章

  1. 1

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

  2. 2

    看起来opencv交换了蓝色和红色通道?

  3. 3

    如何使用misc.imread将图像切成红色,绿色和蓝色通道

  4. 4

    从位图到位图源的转换过程中交换了蓝色和红色通道

  5. 5

    从位图到位图源的转换过程中交换了蓝色和红色通道

  6. 6

    如何在RGB图像中将红色与蓝色交换并保持亮度?

  7. 7

    如何在javascript中交换图像

  8. 8

    如何更改/交换图像中的颜色?

  9. 9

    在YouTube上交换红色和蓝色

  10. 10

    使用Python和OpenCV查找图像中的红色

  11. 11

    使用JavaScript交换图像

  12. 12

    如何使用Jquery和.fadeIn效果在悬停时交换图像?

  13. 13

    如何使用Java或Processing从图像中仅检测单色,例如红色,蓝色或绿色?

  14. 14

    如何使此交换图像代码在Wordpress中工作

  15. 15

    如何在GridView中交换图像(Android)

  16. 16

    如何在样式组件中交换图像URL?

  17. 17

    如何在bash /控制台中使用ImageMagick从图像中删除蓝色通道?

  18. 18

    如何在OpenCV中将灰度图像复制到RGB图像红色通道?

  19. 19

    在ffmpeg渲染的视频中交换了红色和绿色通道

  20. 20

    如何随机交换图像的像素?

  21. 21

    使用jQuery标签交换图像

  22. 22

    使用JS HTML和CSS在“夜间”在任何时区交换图像吗?

  23. 23

    使用JS HTML和CSS在“夜间”在任何时区交换图像吗?

  24. 24

    分解图像(红色通道)

  25. 25

    如何将鼠标悬停在单独的div中交换图像和文本?

  26. 26

    为什么图像的红色,绿色,蓝色通道分别是灰度的(Matlab)?

  27. 27

    转换图像颜色通道?

  28. 28

    在Matlab中交换图像中的圆形像素

  29. 29

    如何交换图片

热门标签

归档