当前位置: 首页 > 面试题库 >

将转换矩阵应用于OpenCV图像中的像素

柳奇希
2023-03-14
问题内容

我想将图像的颜色基础从RGB更改为其他颜色。我有一个要应用于每个像素的RGB的矩阵M,我们可以将其定义为x ij。

我目前正在迭代NumPy图像的每个像素并手动计算Mx ij。我什至无法对它们进行矢量化处理,因为RGB是1x3而不是3x1数组。

有一个更好的方法吗?也许是OpenCV或NumPy中的函数?


问题答案:

记不清执行此操作的规范方法(可能避免了转置),但这应该可行:

import numpy as np

M = np.random.random_sample((3, 3))

rgb = np.random.random_sample((5, 4, 3))

slow_result = np.zeros_like(rgb)
for i in range(rgb.shape[0]):
    for j in range(rgb.shape[1]):
        slow_result[i, j, :] = np.dot(M, rgb[i, j, :])

# faster method
rgb_reshaped = rgb.reshape((rgb.shape[0] * rgb.shape[1], rgb.shape[2]))
result = np.dot(M, rgb_reshaped.T).T.reshape(rgb.shape)

print np.allclose(slow_result, result)

如果是标准色彩空间之间的转换,则应使用Scikit Image:

  • http://scikit-image.org/docs/dev/api/skimage.color.html


 类似资料:
  • 这个问题与这个问题相关:<代码>如何消除数独方块中的凸性缺陷 我试图在Mathematica中将nikie的答案实现到OpenCV Python中。但我被困在程序的最后一步。 IE我得到了所有的交叉点在正方形如下: 现在,我想将其转换为一个完美的正方形(450450),如下所示: (不要介意两幅图像的亮度差异)。 问题:如何在OpenCV Python中做到这一点?我正在使用cv2版本。

  • 问题内容: 我有一个3,076,568个二进制值(1s和0s)的NumPy数组。我想将其转换为矩阵,然后在Python中转换为灰度图像。 但是,当我尝试将数组重塑为1,538,284 x 1,538,284矩阵时,出现内存错误。 如何减小矩阵的大小,以便将其变成适合屏幕显示的图像而又不丢失唯一性/数据? 此外,如何将其转换为灰度图像? 任何帮助或建议,将不胜感激。谢谢。 问题答案: 您的“二进制值

  • 问题内容: 如何将灰度OpenCV图像转换为黑白图像?我看到已经提出了类似的问题,但是我使用的是OpenCV 2.3,建议的解决方案似乎不再起作用。 我正在尝试将灰度图像转换为黑白图像,以便不是绝对黑色的任何东西都是白色,并将其用作surf.detect()的蒙版,以便忽略在黑色蒙版区域边缘上找到的关键点。 下面的Python几乎可以解决我的问题,但是发送到Threshold()的阈值似乎没有任何

  • 我的目标是使图像圆形并显示它。如果图像是方形的,那么我可以通过简单地使用CSS的属性将其转换为圆形。但是当图像是矩形时,使用这个CSS属性会给我椭圆形的图像。 剪辑的部分是不可见的,但仍然存在。所以即使现在我也在尝试使用属性,它给我椭圆形图像,右侧和左侧被剪辑。 我有什么办法可以解决这个问题吗?

  • 给定BGR格式的尺寸数组(宽度、高度、3),如何将此图像转换为sRGB空间?OpenCV()不实现此转换,也不实现对sRGB的任何转换。 我进行了一些研究,找不到任何函数做到这一点,甚至找不到一个我可以遵循的公式来实现我自己的函数。 有什么建议或指导吗?而为什么这种转型在互联网上是一件如此隐晦的事情呢?

  • 本文向大家介绍使用OpenCV检测图像中的矩形,包括了使用OpenCV检测图像中的矩形的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了OpenCV检测图像中矩形的具体代码,供大家参考,具体内容如下 前言 1.OpenCV没有内置的矩形检测的函数,如果想检测矩形,要自己去实现。 2.我这里使用的OpenCV版本是3.30. 矩形检测 1.得到原始图像之后,代码处理的步骤是: (1)滤波