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

时间:2015-04-13 21:24:50

标签: 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的朋友检查我的原始代码和测试代码,但看不出有什么问题。此外,虽然不是这个测试代码的一部分,但我确实尝试使用不同的文件格式和来自各种来源的图像。操作从VideoCapture类接收的opencv框架也是同样的事情,就像我第一次看到这个问题以及我最终想要做的那样。

所以有人在opencv 3.0之前见过这样的事情吗?我最好自定义编译opencv 2.4并使用它吗?我本来可以做到这一点,但我特别关注自定义编译opencv的指南,特别是beaglebone black,他们都使用了最新的3.0,所以我觉得它没问题。无论如何,在我再次编辑过程之前认为它值得检查,因为它往往需要花费几天的时间才能在一夜之间完成它。

编辑: 以防万一其他人去看,想知道我发现了什么。这绝对是我下载的opencv 3.0发布候选版中的一个错误。我无法找到该版本的修复程序,最终不得不降级到2.4.10版本。自降级以来,现在一切正常。

1 个答案:

答案 0 :(得分:3)

虽然它不是" OpenCV解决方案"您可以使用纯python重新排列颜色通道,因为cv2-Interface使用numpy-arrays进行数据存储:

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