6

所以我意识到我可能对未完成的 opencv 版本提出了很多要求,但我在 cvtColor 方法上遇到了奇怪的问题,我找不到其他地方的人的参考资料。首先,作为一些前言,我正在使用 PyQt4、QThreads、Python 2.7 和 opencv 在 beaglebone black 上编写一个多线程 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)

可以在此处找到此代码生成的图像。

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

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

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

4

1 回答 1

3

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

rgb_img = bgr_img[:,:,::-1]    #bgr --> rgb
bgr_img = rgb_img[:,:,::-1]    #bgr --> rgb
于 2015-12-07T15:13:47.073 回答