python-2.7 - Python 2.7 和 Opencv 3.0.0 cvtColor 不适用于 BGR/RGB 转换

标签 python-2.7 opencv debian beagleboneblack opencv3.0

所以我意识到我可能对 opencv 的未完成版本提出了很多要求,但我在使用 cvtColor 方法时遇到了一些奇怪的问题,我无法找到其他人在其他地方拥有的任何其他引用资料。首先,作为一些序言,我在 beaglebone black 上使用 PyQt4、QThreads、Python 2.7 和 opencv 编写了一个多线程 gui 应用程序。我当前的源代码可以在 github HERE 上找到.我最初使用的是 opencv 的 debian repo 版本,但事实证明它太过时了,以至于它没有我正在寻找的一些功能,即 simpleblobdetector 类,而且速度非常慢。考虑到这一点,我从头开始编译了最新的 opencv 3.0.0,从那以后它一直表现得很奇怪。我最终将其缩小为 cvtColor 的问题。然后我将它简化为最少的代码,以确保它不是导致问题的其他原因。这是我一直用于测试的内容。

import cv2

img = cv2.imread('images/original_image.png', cv2.IMREAD_COLOR)

rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
bgr_img = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2BGR)

cv2.imwrite("images/after_convert_to_rgb.png", rgb_img)
cv2.imwrite("images/after_convert_to_gray.png", gray_img)
cv2.imwrite("images/after_convert_back_to_bgr.png", bgr_img)

可以找到此代码生成的图像 HERE .

不用说,我现在被难住了。我发现特别奇怪的是,转换为灰色效果很好,而其他两个根本不起作用。我有几个使用 opencv 的 friend 检查了我的原始代码和这个测试代码,没有发现任何问题。此外,虽然不是此测试代码的一部分,但我确实尝试从各种来源读取不同的文件格式和图像。它还处理从 VideoCapture 类接收到的 opencv 帧,这也是我第一次看到问题的地方,也是我最终尝试做的事情。

那么之前有没有人在opencv 3.0中目睹过这样的事情?我最好只自定义编译 opencv 2.4 并改用它吗?我本来会这样做的,但我一直在遵循关于特别是为 beaglebone black 定制编译 opencv 的指南,他们都使用最新的 3.0,所以我认为它会很好。无论如何,我认为在我再次进行编译过程之前值得检查一下,因为它往往需要我几天的时间才能在一夜之间完成。

编辑: 以防万一其他人去看并想知道我发现了什么。肯定是我下载的opencv 3.0 release candidate的bug。我找不到该版本的修复程序,最终不得不降级到 2.4.10 版。自降级以来,现在一切正常。

最佳答案

虽然它不是“OpenCV 解决方案”,但您可以使用纯 Python 重新排列颜色 channel ,因为 cv2 接口(interface)使用 numpy 数组进行数据存储:

rgb_img = bgr_img[:,:,::-1]    #bgr --> rgb
bgr_img = rgb_img[:,:,::-1]    #bgr --> rgb

关于python-2.7 - Python 2.7 和 Opencv 3.0.0 cvtColor 不适用于 BGR/RGB 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29615374/

相关文章:

python - 如何将 (x,y) 对列表映射到 Pool.map 中的函数 f(x,y)?

opencv - 计算K均值聚类的误差

python - 检查背景图像顶部具有透明度的文本图像之间的可见性(对比度?)

php - 如何从 PHP 脚本运行 linux 命令

python - 循环可变次数时如何返回

python 库从网站获取内容(http 文本)?

python - 按值对像素进行二值化

java - 使用 shell 脚本启动和终止 java 应用程序 (Debian)

debian - 由于依赖关系损坏,apt-get 无法安装任何东西

python - 在工作日重新订购 Pandas 系列